python - 如何在带有珊瑚的 Rasperry Pi 上使用具有 2 个类的自定义 TF.lite 模型?
问题描述
两天前,我在 Tflite 中根据图像数据集创建了一个自定义模型。准确率是 97.4 %,它只有 2 个类(人,花)
我将模型转换为在我的 Rasberry Pi 中使用 TPU Google Coral。
目前,我遇到了一些问题。Google Coral 的文档并不适合我。
语言:Python3
图书馆
- 喀拉斯
- 张量流
- 枕头
- 皮卡梅拉
- 麻木的
- EdgeTPU-引擎
项目树:
-------->模型(子文件夹)
------------>model.tflite
------------>标签.txt
-------->video_detection.py
这是 Python 代码:(实际上代码来自文档)
import argparse
import io
import time
import numpy as np
import picamera
import edgetpu.classification.engine
def main():
parser = argparse.ArgumentParser()
parser.add_argument(
'--model', help='File path of Tflite model.', required=True)
parser.add_argument(
'--label', help='File path of label file.', required=True)
args = parser.parse_args()
with open(args.label, 'r', encoding="utf-8") as f:
pairs = (l.strip().split(maxsplit=2) for l in f.readlines())
labels = dict((int(k), v) for k, v in pairs)
engine = edgetpu.classification.engine.ClassificationEngine(args.model)
with picamera.PiCamera() as camera:
camera.resolution = (640, 480)
camera.framerate = 30
_, width, height, channels = engine.get_input_tensor_shape()
camera.start_preview()
try:
stream = io.BytesIO()
for foo in camera.capture_continuous(stream,
format='rgb',
use_video_port=True,
resize=(width, height)):
stream.truncate()
stream.seek(0)
input = np.frombuffer(stream.getvalue(), dtype=np.uint8)
start_ms = time.time()
results = engine.ClassifyWithInputTensor(input, top_k=1)
elapsed_ms = time.time() - start_ms
if results:
camera.annotate_text = "%s %.2f\n%.2fms" % (
labels[results[0][0]], results[0][1], elapsed_ms*1000.0)
finally:
camera.stop_preview()
if __name__ == '__main__':
main()
如何运行脚本
python3 video_detection.py --model model/model.tflite --label model/labels.txt
错误
`Traceback (most recent call last):
File "video_detection.py", line 41, in <module>
main()
File "video_detection.py", line 16, in main
labels = dict((int(k), v) for k, v in pairs)
File "video_detection.py", line 16, in <genexpr>
labels = dict((int(k), v) for k, v in pairs)
ValueError: not enough values to unpack (expected 2, got 1)`
对我来说,现在很难集成自定义模型并将其与珊瑚一起使用。
文档:
感谢阅读,致以最诚挚的问候
E.
解决方案
错误在 labels.txt 文件中:
labels = dict((int(k), v) for k, v in pairs)
ValueError: not enough values to unpack (expected 2, got 1)`
看起来你有一些只有一个值而不是两个值的行
推荐阅读
- java - 未找到 NetBeans 10 JUnit Jar
- reactjs - 在componentDidMount中获取数据后无法调用函数
- javascript - 在后端而不是前端使用 firebase 身份验证
- java - 我是否必须在我的 hql 查询中防御性地保护空值?
- javascript - 尝试显示函数时如何避免未定义的错误?
- google-apps-script - 来自 Google AppScript 的 GetValue() 无法获取带有子域的邮件 (something@mydomain.com.mx)
- c++ - 在未来的共享库加载时使断点挂起?(y 或 [n])
- qt - 在程序运行 Qt 期间对话框窗口冻结
- wordpress - 以编程方式更新 WooCommerce 产品
- javascript - React Native - 动画完成后奇怪的闪烁