Академический Документы
Профессиональный Документы
Культура Документы
RK3588
Описание задачи
Для выполнения практического задания необходимо написать веб приложение,
выводящее в окно браузера изображение с камеры, и детектирующие объекты на
изображении, с помощью представленной модели.
cd/<Download_Folder>
sudo apt install ./balena-etcher_******_amd64.deb
balena-etcher
https://drive.google.com/drive/folders/1i5zQOg1GIA4_VNGikFl2nPM0Y2MBw2M0
cp rknpu2/runtime/RK3588/Linux/rknn_server/aarch64/usr/bin/restart_rknn.sh
/usr/bin
$ cp rknpu2/runtime/RK3588/Linux/rknn_server/aarch64/usr/bin/start_rknn.sh
/usr/bin
cp rknpu2/runtime/RK3588/Linux/rknn_server/aarch64/usr/bin/rknn_server /usr/bin
cp rknpu2/runtime/RK3588/Linux/librknn_api/aarch64/librknn_api.so /usr/lib
cp rknpu2/runtime/RK3588/Linux/librknn_api/aarch64/librknnrt.so /usr/lib
restart_rknn.sh
pip3 install
rknn-toolkit2/rknn_toolkit_lite2/rknn_toolkit_lite2-1.5.2-cp38-cp38-linux_aarch6
4.whl
pip3 install flask
pip3 install opencv-python
pip3 install numpy
Настройка ssh
Веб приложение
$ nano Live-Streaming-using-OpenCV-Flask/app.py
Запустите скрипт
python3 app.py
откройте в браузере
http://192.168.31.31:8080/
Вы получите следующее:
Веб приложение работает
Воспользуемся репозиторием
https://github.com/laitathei/YOLOv7-ONNX-RKNN-HORIZON-TensorRT-Detection/tree/main
установите onnx
pip3 install
YOLOv7-ONNX-RKNN-HORIZON-TensorRT-Detection/rknn-toolkit2/packages/rknn_toolkit2
-1.5.0+1fa95b5c-cp38-cp38-linux_x86_64.whl
python3 onnx2rknn_step1.py
python3 onnx2rknn_step2.py
scp -r YOLOv7-ONNX-RKNN-HORIZON-TensorRT-Detection/model/
orangepi@192.168.31.31:/home/orangepi/Live-Streaming-using-OpenCV-Flask/
scp -r YOLOv7-ONNX-RKNN-HORIZON-TensorRT-Detection/config/
orangepi@192.168.31.31:/home/orangepi/Live-Streaming-using-OpenCV-Flask/
scp -r YOLOv7-ONNX-RKNN-HORIZON-TensorRT-Detection/dataset/
orangepi@192.168.31.31:/home/orangepi/Live-Streaming-using-OpenCV-Flask/
scp -r YOLOv7-ONNX-RKNN-HORIZON-TensorRT-Detection/result/
orangepi@192.168.31.31:/home/orangepi/Live-Streaming-using-OpenCV-Flask/
scp YOLOv7-ONNX-RKNN-HORIZON-TensorRT-Detection/util.py
orangepi@192.168.31.31:/home/orangepi/Live-Streaming-using-OpenCV-Flask/
conf_thres = 0.25
iou_thres = 0.45
input_width = 640
input_height = 480
model_name = 'yolov7-tiny'
model_path = "./model"
config_path = "./config"
result_path = "./result"
image_path = "./dataset/bus.jpg"
#video_path = "test.mp4"
video_path = 0
video_inference = True
RKNN_MODEL = f'{model_path}/{model_name}-{input_height}-{input_width}.rknn'
CLASSES = ['person', 'bicycle', 'car', 'motorcycle', 'airplane', 'bus', 'train',
'truck', 'boat', 'traffic light', 'fire hydrant', 'stop sign', 'parking meter',
'bench', 'bird', 'cat', 'dog', 'horse', 'sheep', 'cow', 'elephant', 'bear',
'zebra', 'giraffe', 'backpack', 'umbrella', 'handbag', 'tie', 'suitcase',
'frisbee', 'skis','snowboard', 'sports ball', 'kite', 'baseball bat', 'baseball
glove', 'skateboard', 'surfboard', 'tennis racket', 'bottle', 'wine glass',
'cup', 'fork', 'knife', 'spoon', 'bowl', 'banana', 'apple', 'sandwich',
'orange', 'broccoli', 'carrot', 'hot dog', 'pizza', 'donut', 'cake', 'chair',
'couch', 'potted plant', 'bed', 'dining table', 'toilet', 'tv', 'laptop',
'mouse', 'remote', 'keyboard', 'cell phone', 'microwave', 'oven', 'toaster',
'sink', 'refrigerator', 'book', 'clock', 'vase', 'scissors', 'teddy bear', 'hair
drier', 'toothbrush']
app = Flask(__name__)
while True:
# Capture frame-by-frame
success, frame = camera.read() # read the camera frame
if not success:
print('camera_fail((')
break
else:
print('camera+')
ret, buffer = cv2.imencode('.jpg', frame)
frame = buffer.tobytes()
yield (b'--frame\r\n'
b'Content-Type: image/jpeg\r\n\r\n' + frame + b'\r\n') #
concat frame one by one and show result
def gen_frames_yolo():
cap = cv2.VideoCapture(video_path)
while(True):
ret, image_3c = cap.read()
if not ret:
break
print('--> Running model for video inference')
image_4c, image_3c = preprocess(image_3c, input_height, input_width)
outputs = rknn_lite.inference(inputs=[image_3c])
outputs[0] = np.squeeze(outputs[0])
outputs[0] = np.expand_dims(outputs[0], axis=0)
colorlist = gen_color(len(CLASSES))
results = postprocess(outputs, image_4c, image_3c, conf_thres,
iou_thres) ##[box,mask,shape]
results = results[0] ## batch=1
boxes, shape = results
if isinstance(boxes, np.ndarray):
vis_img = vis_result(image_3c, results, colorlist, CLASSES,
result_path)
#cv2.imshow("vis_img", vis_img)
ret, buffer = cv2.imencode('.jpg', vis_img)
vis_img = buffer.tobytes()
yield (b'--frame\r\n'
b'Content-Type: image/jpeg\r\n\r\n' + vis_img + b'\r\n')
else:
print("No detection result")
cv2.waitKey(1)
@app.route('/video_feed')
def video_feed():
#Video streaming route. Put this in the src attribute of an img tag
return Response(gen_frames_yolo(), mimetype='multipart/x-mixed-replace;
boundary=frame')
@app.route('/')
def index():
"""Video streaming home page."""
return render_template('index.html')
if __name__ == '__main__':
isExist = os.path.exists(result_path)
if not isExist:
os.makedirs(result_path)
rknn_lite = RKNNLite(verbose=False)
ret = rknn_lite.load_rknn(RKNN_MODEL)
ret = rknn_lite.init_runtime()
Запустите приложение
python3 Live-Streaming-using-OpenCV-Flask/app.py
Заключение
В этом практическом занятии мы освоили развертывание моделей компьютерного
зрения на одноплатном компьютере.
Этот пайплайн вы можете повторять и для своих моделей в будущих проектах.