10.python读取终端的rknn模型

直接读取终端模型的代码如下:

import cv2
import subprocess
import sys
import os
import time
 
 
start=time.time()
p = subprocess.run(['./rknn_yolov5_demo', './model/RK3588/best.rknn', './model/bus.jpg'],capture_output=True).stdout

print("................................")
outputs=str(p).split("@")
for item in outputs:
    print(item)


end=time.time()
print(end-start)

       当然,我们在读取终端模型时,需要获得模型的类及坐标和精度,并且根据自己选中的类对图片中的目标画框并标注出类的名称和精度。检测一张的图片的代码如下(检测视频或者摄像头视频时把图片路径修改成视频取帧的路径即可):
 

import cv2
import subprocess
import sys
import os
import time
import matplotlib.pyplot as plt

start=time.time()
p = subprocess.run(['./rknn_yolov5_demo', './model/RK3588/best.rknn', './model/bus.jpg'],capture_output=True).stdout

print("................................")
outputs=str(p).split("@")
print("====>",len(outputs))

classes=[]
if len(outputs)>3:
    s1=outputs[1].split("\\")[-1][1:]
    s2=outputs[-1].split("\\")[0]
    #print(s1) 
    #print(s2)
    classes.append(s1)
    for i in range(2,len(outputs)-1):
        #print(outputs[i].split("\\"))
        classes.append(outputs[i].split("\\")[0])
        classes.append(outputs[i].split("\\")[1][1:])
    classes.append(s2)
#print("..............................................................")
#print(classes)
num_class=[]
if len(classes)>2:
    for i in range(0,len(classes)-1,2):
        num_class.append(classes[i:i+2])

print("..............................................................")
print(num_class)

if len(num_class)>0:
    img=cv2.imread(r"model/bus.jpg")#读取要检测的图片,后面对该图片标注检测的结果
    for item in num_class:
        index1=item[1].split(")")[0][2:].split(" ")
        index2=item[1].split(")")[1]
        #print(index1,index2)
        
        a=(int(index1[0]),int(index1[1]))
        b=(int(index1[2]),int(index1[3]))
        print(a,b)
        cv2.rectangle(img, a, b, (0, 255, 0), 2)
        
        c=item[0]
        d=float(index2)
        font=cv2.FONT_HERSHEY_SIMPLEX
        imgzi = cv2.putText(img, '{} {:.3f}'.format(c,d), (a[0], a[1]), font, 0.5, (0, 255, 255), 1)  
        
cv2.imwrite('1.jpg',img)#检测结果的图片的保存路径
end=time.time()
print(end-start)

以上代码的标注结果如下:

    测试摄像头视频的代码如下:

# coding:utf-8

import cv2
import subprocess
import sys
import os
import time
import matplotlib.pyplot as plt

def mm():

    start=time.time()
    p = subprocess.run(['./rknn_yolov5_demo', './model/RK3588/best.rknn', './hh.jpg'],capture_output=True).stdout
    
    print("................................")
    outputs=str(p).split("@")
    print("====>",len(outputs))
    
    classes=[]
    if len(outputs)<3:
        classes=[]
    elif len(outputs)==3:
        s1=outputs[1].split("\\")[-1][1:]
        s2=outputs[-1].split("\\")[0]
        classes.append(s1)
        classes.append(s2)
    
    elif len(outputs)>3:
        s1=outputs[1].split("\\")[-1][1:]
        s2=outputs[-1].split("\\")[0]
        #print(s1) 
        #print(s2)
        classes.append(s1)
        for i in range(2,len(outputs)-1):
            #print(outputs[i].split("\\"))
            classes.append(outputs[i].split("\\")[0])
            classes.append(outputs[i].split("\\")[1][1:])
        classes.append(s2)
    #print("..............................................................")
    print(classes)
    num_class=[]
    if len(classes)>0:
        for i in range(0,len(classes)-1,2):
            num_class.append(classes[i:i+2])
    
    print("..............................................................")
    print(num_class)
    img=cv2.imread(r"hh.jpg")
    if len(num_class)>0:
        
        for item in num_class:
            index1=item[1].split(")")[0][2:].split(" ")
            index2=item[1].split(")")[1]
            #print(index1,index2)
            
            a=(int(index1[0]),int(index1[1]))
            b=(int(index1[2]),int(index1[3]))
            print(a,b)
            cv2.rectangle(img, a, b, (0, 255, 0), 2)
            
            c=item[0]
            d=float(index2)
            font=cv2.FONT_HERSHEY_SIMPLEX
            imgzi = cv2.putText(img, '{} {:.3f}'.format(c,d), (a[0], a[1]), font, 0.5, (0, 255, 255), 1)  
            
    cv2.imwrite('1.jpg',img)
    end=time.time()
    print(end-start)
    cv2.imshow("src_image", img)

    cv2.waitKey(1)


cap = cv2.VideoCapture("/dev/video61")

index = 1

while (cap.isOpened()):

    ret, frame = cap.read()
    
    frame = cv2.rotate(frame, 0, dst=None)  # 视频是倒着的,要对视频进行两次90度的翻转
    
    frame = cv2.rotate(frame, 0, dst=None)  # 视频是倒着的,要对视频进行两次90度的翻转
    
    if index%8==0:
        cv2.imwrite("hh.jpg",frame)
        
        start=time.time()
        mm()

        end=time.time()
        print(end-start)
      
    index+=1
    
    #cv2.imshow("src_image", frame)

    #cv2.waitKey(1)
    

用进程检测图片的代码如下:

# coding:utf-8

import cv2
import subprocess
import sys
import os
import time
import matplotlib.pyplot as plt
from threading import Thread
import multiprocessing


def mm():
    start=time.time()
    p = subprocess.run(['./rknn_yolov5_demo', './model/RK3588/best.rknn', './hh.jpg'],capture_output=True).stdout
    
    outputs=str(p).split("@")
    print("====>",len(outputs))
    
    classes=[]
    if len(outputs)<3:
        classes=[]
    elif len(outputs)==3:
        s1=outputs[1].split("\\")[-1][1:]
        s2=outputs[-1].split("\\")[0]
        classes.append(s1)
        classes.append(s2)
    
    elif len(outputs)>3:
        s1=outputs[1].split("\\")[-1][1:]
        s2=outputs[-1].split("\\")[0]
        #print(s1) 
        #print(s2)
        classes.append(s1)
        for i in range(2,len(outputs)-1):
            #print(outputs[i].split("\\"))
            classes.append(outputs[i].split("\\")[0])
            classes.append(outputs[i].split("\\")[1][1:])
        classes.append(s2)
    #print("..............................................................")
    print(classes)
    num_class=[]
    if len(classes)>0:
        for i in range(0,len(classes)-1,2):
            num_class.append(classes[i:i+2])
    
    print("..............................................................")
    print(num_class)
    img=cv2.imread(r"hh.jpg")
    if len(num_class)>0:
        
        for item in num_class:
            index1=item[1].split(")")[0][2:].split(" ")
            index2=item[1].split(")")[1]
            #print(index1,index2)
            
            a=(int(index1[0]),int(index1[1]))
            b=(int(index1[2]),int(index1[3]))
            print(a,b)
            cv2.rectangle(img, a, b, (0, 255, 0), 2)
            
            c=item[0]
            d=float(index2)
            font=cv2.FONT_HERSHEY_SIMPLEX
            imgzi = cv2.putText(img, '{} {:.3f}'.format(c,d), (a[0], a[1]), font, 0.5, (0, 255, 255), 1)  
            
    cv2.imwrite('ss.jpg',img)
    end=time.time()
    


cap = cv2.VideoCapture("/dev/video61")

index = 1

while (cap.isOpened()):


    ret, frame = cap.read()
    
    frame = cv2.rotate(frame, 0, dst=None)  # 视频是倒着的,要对视频进行两次90度的翻转
    
    frame = cv2.rotate(frame, 0, dst=None)  # 视频是倒着的,要对视频进行两次90度的翻转
    
    cv2.imwrite("hh.jpg",frame)
        
    start=time.time()
    #t = Thread(target=mm)
    processes = []
    if index%8==0:
    
      myprocess = multiprocessing.Process(target=mm)
      processes.append(myprocess)
      processes[-1].daemon = True
      processes[-1].start()
    
    #t.run()

    end=time.time()
    print(end-start)
      
    index+=1
    
    frames=cv2.imread("ss.jpg")
    
    if frames is not None:
    
      cv2.imshow("src_image", frames)

      cv2.waitKey(1)
    else:
      cv2.imshow("src_image", frame)
      cv2.waitKey(1)
    

  • 12
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值