图像识别模型预测

机器学习和人工智能领域,图像识别是一项基础且重要的任务。通过训练模型来识别和分类图像中的内容,可以广泛应用于安防监控、医疗诊断、自动驾驶等多个领域。本文将介绍如何使用Roboflow平台进行图像识别模型的预测,包括本地图片和网络图片的预测方法。

环境准备

在开始之前,确保已经安装了Roboflow库,并且拥有一个有效的API密钥。可以通过Roboflow的官方网站获取API密钥。此外,如果打算在Node.js环境中进行预测,还需要安装axios库来发送HTTP请求。

预测本地图像

首先,将学习如何预测本地图像。以下是一个使用Python语言进行预测的示例代码。这段代码首先导入了Roboflow库,并使用API密钥创建了一个Roboflow对象。然后,通过指定模型的端点和版本号,加载了相应的模型。最后,使用模型的predict方法对本地图像进行预测,并打印出预测结果。

from roboflow import Roboflow rf = Roboflow(api_key="API_KEY") project = rf.workspace().project("MODEL_ENDPOINT") model = project.version(VERSION).model # 预测本地图像 print(model.predict("your_image.jpg").json())

如果想可视化预测结果,可以使用model.predict方法的save函数将预测结果保存为图片。此外,如果图像已经托管在网络其他地方,也可以通过指定URL的方式进行预测。

使用Node.js预测本地图像

在Node.js环境中,可以使用axios库来发送POST请求,对本地图像进行预测。以下是一个示例代码。这段代码首先导入了axios和fs库,然后使用fs库读取本地图像文件,并将其编码为base64格式。接着,使用axios库发送POST请求,将编码后的图像数据发送到Roboflow的预测接口。最后,打印出预测结果。

const axios = require("axios"); const fs = require("fs"); const image = fs.readFileSync("YOUR_IMAGE.jpg", { encoding: "base64" }); axios({ method: "POST", url: "https://classify.roboflow.com/your-model/42", params: { api_key: "YOUR_KEY" }, data: image, headers: { "Content-Type": "application/x-www-form-urlencoded" } }) .then(function(response) { console.log(response.data); }) .catch(function(error) { console.log(error.message); });

在这段代码中,首先读取本地图像文件,并将其编码为base64格式。然后,使用axios库发送POST请求,将编码后的图像数据发送到Roboflow的预测接口。在请求的参数中,需要指定API密钥和模型的版本号。最后,打印出预测结果。

预测网络图像

除了预测本地图像外,Roboflow还支持预测网络图像。以下是一个使用Python语言进行网络图像预测的示例代码。这段代码首先导入了UIKit库,然后使用UIKit库加载网络图像,并将其编码为base64格式。接着,创建一个URLRequest对象,指定预测接口的URL,并设置请求方法为POST。最后,使用URLSession的dataTask方法发送请求,并打印出预测结果。

import UIKit // 加载图像并转换为Base64 let image = UIImage(named: "your-image-path") let imageData = image?.jpegData(compressionQuality: 1) let fileContent = imageData?.base64EncodedString() let postData = fileContent!.data(using: .utf8) // 初始化推理服务器请求 var request = URLRequest(url: URL(string: "https://classify.roboflow.com/your-model/your-model-version?api_key=YOUR_APIKEY&name=YOUR_IMAGE.jpg")!, timeoutInterval: Double.infinity) request.addValue("application/x-www-form-urlencoded", forHTTPHeaderField: "Content-Type") request.httpMethod = "POST" request.httpBody = postData // 执行POST请求 URLSession.shared.dataTask(with: request, completionHandler: { data, response, error in // 解析响应为字符串 guard let data = data else { print(String(describing: error)) return } // 将响应字符串转换为字典 do { let dict = try JSONSerialization.jsonObject(with: data, options: []) as? [String: Any] } catch { print(error.localizedDescription) } // 打印字符串响应 print(String(data: data, encoding: .utf8)!) }) .resume()

在这段代码中,首先加载网络图像,并将其编码为base64格式。然后,创建一个URLRequest对象,指定预测接口的URL,并设置请求方法为POST。在请求的参数中,需要指定API密钥和模型的版本号。最后,使用URLSession的dataTask方法发送请求,并打印出预测结果。

响应对象格式

Roboflow的预测接口返回一个JSON对象,其中包含了预测结果的详细信息。对于单标签分类任务,JSON对象包含以下属性:

  • time:处理图像并返回预测结果所需的总时间(秒)
  • image:包含预测图像信息的对象,包括图像的宽度和高度
  • predictions:包含所有预测类别及其对应的置信度值的集合
  • class:分类的标签
  • confidence:模型对图像包含检测到的分类对象的置信度
  • top:置信度最高的预测类别
  • confidence:预测的置信度分数
  • image_path:预测图像的路径
  • prediction_type:用于执行推理的模型类型,例如ClassificationModel

对于多标签分类任务,JSON对象的格式略有不同,除了包含上述属性外,还包含predicted_classes属性,表示模型预测的所有类别(标签/类别)的列表。

要使用推理API,需要向以下URL发送POST请求:

POST https://classify.roboflow.com/:datasetSlug/:versionNumber

可以直接将base64编码的图像数据POST到模型端点,或者在查询字符串中传递URL作为image参数,如果图像已经托管在其他地方。

路径参数:

  • datasetSlug:数据集名称的URL安全版本。可以在Web UI中通过查看主项目视图页面的URL来找到它。
  • versionNumber:标识数据集版本的版本号。

查询参数:

  • api_key:API密钥(通过工作区API设置页面获得)

状态码:

  • 200:OK
  • 403:Forbidden

以下是一个示例JSON响应对象,展示了单标签分类任务的预测结果:

{ "predictions": { "bird": { "confidence": 0.5282308459281921 }, "cat": { "confidence": 0.5069406032562256 }, "dog": { "confidence": 0.49514248967170715 } }, "predicted_classes": [ "bird", "cat" ] }

以下是一个示例JSON响应对象,展示了多标签分类任务的预测结果:

{ "time": 0.19291414400004214, "image": { "width": 113, "height": 210 }, "predictions": { "dent": { "confidence": 0.5253503322601318 }, "severe": { "confidence": 0.5804202556610107 } }, "predicted_classes": [ "dent", "severe" ], "image_path": "/car-model-343.jpg", "prediction_type": "ClassificationModel" }
沪ICP备2024098111号-1
上海秋旦网络科技中心:上海市奉贤区金大公路8218号1幢 联系电话:17898875485