使用 YOLOv8 在移動裝置上進行物件檢測和姿態估計
瞭解如何在移動裝置上構建和執行具有內建預處理和後處理功能的 ONNX 模型,以實現物件檢測和姿態估計。
目錄
使用 YOLOv8 進行物件檢測
您可以在 ONNX Runtime 推理示例儲存庫中找到 Android 應用程式的完整原始碼。
構建具有內建預處理和後處理功能的 ONNX 模型
此步驟是可選的,因為模型在上面的應用程式資料夾中的示例儲存庫中可用。如果您有興趣,以下步驟將向您展示如何自行構建模型。
建立一個 Python 環境並安裝以下包。
pip install --upgrade onnx onnxruntime onnxruntime-extensions pillow
下載以下指令碼以構建模型。
curl https://raw.githubusercontent.com/microsoft/onnxruntime-extensions/main/tutorials/yolo_e2e.py > yolo_e2e.py
執行指令碼。
python yolo_e2e.py [--test_image <image to test on>]
指令碼執行後,您將看到一個 PyTorch 模型和兩個 ONNX 模型
yolov8n.pt: 原始 YOLOv8 PyTorch 模型yolov8n.onnx: 匯出的 YOLOv8 ONNX 模型yolov8n.with_pre_post_processing.onnx: 包含預處理和後處理的 ONNX 模型<test image>.out.jpg: 您的測試影像,帶有提供的邊界框。
例如,擴充套件儲存庫中的狼測試影像

構建 Android 應用程式
將 Android 應用程式載入到 Android Developer Studio 中。
您可以在 ObjectDetector.kt 中看到主要的推理程式碼。這就像將影像載入到位元組陣列中,然後透過 ONNX Runtime 執行模型以獲取帶有邊界框的原始影像一樣簡單。
fun detect(inputStream: InputStream, ortEnv: OrtEnvironment, ortSession: OrtSession): Result {
// Step 1: convert image into byte array (raw image bytes)
val rawImageBytes = inputStream.readBytes()
// Step 2: get the shape of the byte array and make ort tensor
val shape = longArrayOf(rawImageBytes.size.toLong())
val inputTensor = OnnxTensor.createTensor(
ortEnv,
ByteBuffer.wrap(rawImageBytes),
shape,
OnnxJavaType.UINT8
)
inputTensor.use {
// Step 3: call ort inferenceSession run
val output = ortSession.run(Collections.singletonMap("image", inputTensor),
setOf("image_out","scaled_box_out_next")
)
// Step 4: output analysis
output.use {
val rawOutput = (output?.get(0)?.value) as ByteArray
val boxOutput = (output?.get(1)?.value) as Array<FloatArray>
val outputImageBitmap = byteArrayToBitmap(rawOutput)
// Step 5: set output result
var result = Result(outputImageBitmap,boxOutput)
return result
}
}
}

使用 YOLOv8 進行姿態估計
構建姿態估計模型
注意:本教程的這部分使用 Python。Android 和 iOS 示例即將推出!
建立一個 Python 環境並安裝以下包。
pip install --upgrade onnx onnxruntime onnxruntime-extensions pillow
下載以下指令碼以構建模型。
curl https://raw.githubusercontent.com/microsoft/onnxruntime-extensions/main/tutorials/yolov8_pose_e2e.py > yolov8_pose_e2e.py
執行指令碼。
python yolov8_pose_e2e.py
指令碼執行後,您將看到一個 PyTorch 模型和兩個 ONNX 模型
yolov8n-pose.pt: 原始 YOLOv8 PyTorch 模型yolov8n-pose.onnx: 匯出的 YOLOv8 ONNX 模型yolov8n-pose.with_pre_post_processing.onnx: 包含預處理和後處理的 ONNX 模型
執行姿態估計示例
您可以使用相同的指令碼執行模型,提供您自己的影像來檢測姿態。
python yolov8_pose_e2e.py --test_image person.jpg --run_model
並且輸出會繪製在原始影像上!

開發您的移動應用程式
您可以使用 Python 推理程式碼作為開發移動應用程式的基礎。