Два дня назад я создал пользовательскую модель в Tflite из набора данных изображения. Точность 97,4% и всего 2 класса (человек, цветок).
Я преобразовал модель, чтобы использовать ее в моем Rasberry Pi с TPU Google Coral.
На данный момент у меня возникли некоторые проблемы. Документация Google Coral не для меня.
Язык: Python3
Библиотеки
- Керас
- Tensorflow
- Подушка
- Picamera
- Numpy
- EdgeTPU-Engine
Дерево проекта:
--------> модель (подпапка)
-----------> модель.tflite
-----------> labels.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)`
Для меня сейчас очень сложно интегрировать нестандартную модель и использовать ее с кораллами.
Документация:
https://coral.withgoogle.com/docs/edgetpu/models-intro/ < / а>
https://coral.withgoogle.com/docs/edgetpu/api-intro/ < / а>
https://coral.withgoogle.com/docs/edgetpu/tflite-python/ < / а>
https://coral.googlesource.com/edgetpu/+/refs/heads/release-chef/edgetpu/
Спасибо за чтение, с наилучшими пожеланиями
E.