Bootstrap

用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,一个热爱分享技术的无名程序猿,我们下期见。