Chuyển tới nội dung chính

Chạy suy luận ảnh bằng đối tượng suy luận thị giác CoreML (:predict)

Khai báo​

kết quả trả về, thông báo lỗi = đối tượng suy luận thị giác:predict(ảnh cần suy luận)

hoặc

đã gửi hay chưa, thông báo lỗi = đối tượng suy luận thị giác:predict(ảnh cần suy luận, {
async = có chạy bất đồng bộ hay không,
multi_array_output = "table" hoặc "MLMultiArray",
uses_cpu_only = lần này có chỉ dùng CPU hay không,
})

Tham số​

  • ảnh cần suy luận
    Đối tượng ảnh dùng để chạy suy luận.

  • async
    Kiểu boolean, không bắt buộc. Khi là true, gửi yêu cầu bất đồng bộ. Mặc định là false.

  • multi_array_output
    Kiểu chuỗi, không bắt buộc. Khi mô hình trả về đặc trưng MLMultiArray, chọn "table" hoặc "MLMultiArray". Mặc định là "table".

  • uses_cpu_only
    Kiểu boolean, không bắt buộc. Chỉ áp dụng cho lời gọi này. Khi là true, quá trình suy luận chỉ chạy trên CPU.

Giá trị trả về​

  • kết quả trả về
    Kiểu bảng.

    Cấu trúc trả về của mô hình phát hiện đối tượng
    {
    {
    ["y"] = number_value,
    ["x"] = number_value,
    ["w"] = number_value,
    ["h"] = number_value,
    ["confidence"] = number_value(0.0 ~ 100.0),
    ["name"] = string_value,
    },
    ...
    }
    Cấu trúc trả về của mô hình phân loại ảnh
    {
    {
    ["confidence"] = number_value(0.0 ~ 100.0),
    ["name"] = string_value,
    },
    ...
    }
    Các loại mô hình khác
    {
    ...
    }

Lưu ý​

  • Khả dụng từ phiên bản ứng dụng 1.3.8 trở lên.
  • Không hỗ trợ các phiên bản iOS thấp hơn 12.
  • Chạy suy luận trên ảnh bằng đối tượng suy luận thị giác hiện tại và trả về kết quả.
  • Nếu mô hình trả về giá trị đặc trưng MLMultiArray, hãy đặt multi_array_output = "MLMultiArray" để giữ chúng dưới dạng đối tượng tensor gốc cho bước xử lý tiếp theo.
  • :run() là bí danh của :predict(). Sau khi gửi bất đồng bộ, dùng :is_done() và :results() để đọc kết quả.
  • Đối tượng suy luận thị giác còn cung cấp các phương thức như :metadata(), :compute_units(), :image_crop_and_scale_option(), :class_labels() và :is_vision_request()

Ví dụ​

compiled_model_path = XXT_HOME_PATH..'/models/yolo11m.mlmodelc'

file.remove(compiled_model_path)

if not file.exists(compiled_model_path) then
local tmp_path, err = coreml.compile_model(XXT_HOME_PATH..'/models/yolo11m.mlpackage')
if not tmp_path then
error(err)
end
file.move(tmp_path, compiled_model_path, 'mo')
end

vnrequest, err = coreml.new_vision_request(compiled_model_path)
if not vnrequest then
error(err)
end

rets = vnrequest:predict(screen.image())
nLog(rets)