用OpenVINO对图像进行分类
上一篇文章()我们完成的环境的搭建。今天我们进行我们的第一个Hello World项目--用OpenVINO 对图像进行分类。
该项目为【OpenVINO™ Notebooks】项目的001-hello-world工程。
该工程位于我们之前下载好的项目中

运行项目
在运行前我们先来介绍一下目录结构
001-hello-world.ipynb: 工程文件
data:用来保存数据的,里面是一只狗狗。
model:保存的是模型文件
utils:保存的是数据集相关的信息。
在运行代码之前,我们需要确认好它用的环境

我这个是一个错误示范,正确的环境应该是:openvino_env。
我们可以通过点击环境的名称然后进行选择

导入库文件
import json
import cv2
import matplotlib.pyplot as plt
import numpy as np
from openvino.inference_engine import IECore

选择这个单元格ctrl + alt + enter进行代码运行,也可以直接点击左上角的运行按钮。
运行后如果看到如下图所示错误

我们可以将代码修改如下
import json
import os
os.environ['Path'] += 'C:\\Program Files (x86)\\Intel\openvino_2021.4.689\\deployment_tools\\inference_engine\\external\\hddl\\bin;' \
'C:\\Program Files (x86)\\Intel\openvino_2021.4.689\\deployment_tools\\inference_engine\\external\\tbb\\bin;'\
'C:\\Program Files (x86)\\Intel\openvino_2021.4.689\\deployment_tools\\inference_engine\\bin\\intel64\\Debug;'\
'C:\\Program Files (x86)\\Intel\openvino_2021.4.689\\deployment_tools\\inference_engine\\bin\\intel64\\Release;'\
'C:\\Program Files (x86)\\Intel\openvino_2021.4.689\\deployment_tools\\ngraph\\lib;'\
'C:\\Program Files (x86)\\Intel\openvino_2021.4.689\\deployment_tools\\model_optimizer;'
import cv2
import matplotlib.pyplot as plt
import numpy as np
from openvino.inference_engine import IECore
C:\\Program Files (x86)\\Intel\openvino_2021.4.689 是我的OpenVINO安装目录,这个你要换成你自己的路径才行。
再次运行,报错消失

加载模型
ie = IECore()
net = ie.read_network(
model="model/v3-small_224_1.0_float.xml", weights="model/v3-small_224_1.0_float.bin"
)
exec_net = ie.load_network(network=net, device_name="CPU")
input_key = next(iter(exec_net.input_info))
output_key = next(iter(exec_net.outputs.keys()))
我们这里使用的是Intel 的CPU,如果你的是AMD的我不确定是否会出问题,因为我们有AMD的CPU,欢迎你在评论区告诉我运行结果。

加载图片
# The MobileNet network expects images in RGB format
image = cv2.cvtColor(cv2.imread(filename="data/coco.jpg"), code=cv2.COLOR_BGR2RGB)
# resize to MobileNet image shape
input_image = cv2.resize(src=image, dsize=(224, 224))
# reshape to network input shape
input_image = np.expand_dims(input_image.transpose(2, 0, 1), 0)
plt.imshow(image);
运行后我们在VSCode中会看到

进行推理
result = exec_net.infer(inputs={input_key: input_image})[output_key]
result_index = np.argmax(result)
查看推理结果
# Convert the inference result to a class name.
imagenet_classes = json.loads(open("utils/imagenet_class_index.json").read())
# The model description states that for this model, class 0 is background,
# so we add 1 to the network output to get the class name
imagenet_classes = {int(key) + 1: value for key, value in imagenet_classes.items()}
imagenet_classes[result_index]

百度查询了一下flat-coated_retriever这个单词

似乎是没什么问题,为了验证方便,我们把它换成鸭子试试。

将图片命名为test.jpg
我们从加载图片的步骤开始再次验证一次看看

记得将文件名称修改一下哦。
验证结果,可以到达它识别出来了。

好了,今天的内容就是这些了,如果对你有所帮助,欢迎转发给你的朋友们。
我是 Tango,一个热爱分享技术的无名程序猿,我们下期见。