Toybrick

标题: 人工智能开发系列(1) 中文手势识别例程 [打印本页]

作者: troy    时间: 2019-1-10 17:51
标题: 人工智能开发系列(1) 中文手势识别例程
[attach]96[/attach]

本教程视频直播回看:
[attach]308[/attach]


1.快速上手


Project地址:https://github.com/tz28/Chinese-number-gestures-recognition
CSDN博客地址:https://blog.csdn.net/u012328159/article/details/81123018

运行结果如下:
[attach]49[/attach]


2.概述
一个简单的AI开发sample

Github开源的数字手势识别CNN模型,识别数字0-10十一种手势

类LeNet-5,两个卷积层,两个池化层,一个全连接层,一个Softmax输出层
[attach]48[/attach]



识别结果
[attach]50[/attach]



3.RKNN使用解析
Rknn运行相关的源码集中在rknn_test下,目录结构如下所示:

rknn_test/
├── digital_gesture.rknn        //转换之后的rknn模型
├── rknn_camera.py        //使用rknn模型进行对camera数据进行推理运算
├── rknn_picture.py        //使用rknn模型进行对图片数据进行推理运算
└── rknn_transfer.py        //用于将TensorFlow的pb模型转换为rknn模型

3.1 rknn_transfer.py
  1. from rknn.api import RKNN        

  2. INPUT_SIZE = 64

  3. if __name__ == '__main__':
  4.         # 创建RKNN执行对象
  5.         rknn = RKNN()

  6.         #初始化RKNN运行环境,指定host=’rk3399pro’,后续的操作将会运行在NPU上
  7.         print('--> Init runtime environment')
  8.         ret = rknn.init_runtime(host='rk3399pro')
  9.         if ret != 0:
  10.                 print('Init runtime environment failed')
  11.                 exit(ret)
  12.                 print('done')

  13.         # 配置模型输入,用于NPU对数据输入的预处理
  14.         # channel_mean_value='0 0 0 255',那么模型推理时,将会对RGB数据做如下转换
  15.         # (R - 0)/255, (G - 0)/255, (B - 0)/255。推理时,RKNN模型会自动做均值和归一化处理
  16.         # reorder_channel=’0 1 2’用于指定是否调整RBG顺序,设置成0 1 2即按输入的RGB顺序不做调整
  17.         # reorder_channel=’2 1 0’表示交换0和2通道,如果输入是RGB,将会被调整为BGR。如果是BGR将会被
  18.         # 调整为RGB
  19.         rknn.config(channel_mean_value='0 0 0 255', reorder_channel='0 1 2')

  20.         # 加载TensorFlow模型
  21.         # tf_pb='../digital_gesture_recognition/model_2500/digital_gesture.pb'指定待转换的TensorFlow模型
  22.         # inputs指定模型中的输入节点
  23.         # outputs指定模型中输出节点
  24.         # input_size_list指定模型输入的大小
  25.         print('--> Loading model')
  26.         rknn.load_tensorflow(tf_pb='../digital_gesture_recognition/model_2500/digital_gesture.pb',
  27.                                 inputs=['input_x'],
  28.                                 outputs=['probability'],
  29.                                 input_size_list=[[INPUT_SIZE, INPUT_SIZE, 3]])
  30.         print('done')

  31.         # 创建解析pb模型
  32.         # do_quantization=False指定不进行量化
  33.         # 量化会减小模型的体积和提升运算速度,但是会有精度的丢失
  34.         print('--> Building model')
  35.         rknn.build(do_quantization=False)
  36.         print('done')

  37.         # 导出保存rknn模型文件
  38.         rknn.export_rknn('./digital_gesture.rknn')

  39.         # Release RKNN Context
  40.         rknn.release()
复制代码


3.2 rknn_picture.py
  1. import numpy as np
  2. from PIL import Image
  3. from rknn.api import RKNN

  4. # 解析模型的输出,获得概率最大的手势和对应的概率
  5. def get_predict(probability):
  6.         data = probability[0][0]
  7.         data = data.tolist()
  8.         max_prob = max(data)

  9. return data.index(max_prob), max_prob;

  10. def load_model():
  11.         # 创建RKNN对象
  12.         rknn = RKNN()

  13.         # 载入RKNN模型
  14.         print('-->loading model')
  15.         rknn.load_rknn('./digital_gesture.rknn')
  16.         print('loading model done')

  17.         # 初始化RKNN运行环境
  18.         print('--> Init runtime environment')
  19.         ret = rknn.init_runtime(host='rk3399pro')
  20.         if ret != 0:
  21.                 print('Init runtime environment failed')
  22.                 exit(ret)

  23.         print('done')

  24.         return rknn

  25. def predict(rknn):
  26.         im = Image.open("../picture/6_7.jpg")        # 加载图片
  27.         im = im.resize((64, 64),Image.ANTIALIAS)  # 图像缩放到64x64
  28.         mat = np.asarray(im.convert('RGB'))           # 转换成RGB格式
  29.         outputs = rknn.inference(inputs=[mat])      # 运行推理,得到推理结果
  30.         pred, prob = get_predict(outputs)               # 将推理结果转化为可视信息

  31.         print(prob)
  32.         print(pred)

  33. if __name__=="__main__":
  34.         rknn = load_model()
  35.         predict(rknn)
复制代码


3.3 TensorFlow迁移到RKNN
3.3.1 模型的加载
  1. # tensorflow 模型加载,加载的是pb模型,并且获得pb对应的graph进行使用。
  2. def load_model():
  3.         with tf.gfile.GFile('./digital_gesture_recognition/model_2500/digital_gesture.pb', "rb") as f:  #读取模型数据
  4.                 graph_def = tf.GraphDef()
  5.                 graph_def.ParseFromString(f.read())                   #得到模型中的计算图和数据
  6.                 with tf.Graph().as_default() as graph:                 # 这里的Graph()要有括号,不然会报TypeError
  7.                         tf.import_graph_def(graph_def, name="")   # 导入模型中的图到现在这个新的计算图中
  8.                         return graph
复制代码
  1. #RKNN模型加载,需要加载的是pb转换后的rknn模型,并且设置RKNN运行环境即可使用
  2. def load_model():
  3.         # 创建RKNN对象
  4.         rknn = RKNN()

  5.         # 载入RKNN模型
  6.         print('-->loading model')
  7.         rknn.load_rknn('./digital_gesture.rknn')
  8.         print('loading model done')

  9.         # 初始化RKNN运行环境
  10.         print('--> Init runtime  environment')
  11.         ret = rknn.init_runtime(host='rk3399pro')
  12.         if ret != 0:
  13.                 print('Init runtime environment failed')
  14.                 exit(ret)
  15.         print('done')

  16.         return rknn
复制代码


3.3.2. 图像的预处理
  1. # 对于TensorFlow,输入图像数据必须为float32类型,且归一化的(1,64,64,3)形状的矩阵
  2. im = Image.open("dataset//new_pic//test6.jpg")
  3. im = im.resize((64, 64),Image.ANTIALIAS)        # 图像缩放到64x64
  4. mat = np.asarray(im.convert('RGB'))                 # 转成RGB格式,此时数据类型为UINT8
  5. mat = mat.reshape(1,64,64,3)                         # TensorFlow需要的是(1,64,64,3)的float32类型数据
  6. mat = mat / 255.                                            # 数据归一化
复制代码
  1. # 对于RKNN,图像的归一化和转float32,已经在模型转换时设置好,推理时会自动完成
  2. im = Image.open("dataset//new_pic//test6.jpg")
  3. im = im.resize((64, 64),Image.ANTIALIAS)        # 图像缩放到64x64
  4. mat = np.asarray(im.convert('RGB'))                 # 转成RGB格式,此时数据类型为UINT8
复制代码


3.3.3. 模型输入与输出
  1. # TensorFlow:需要输入(1,64,64,3)且进行归一后之后的float32类型矩阵
  2. mat = img_to_mat("./picture/0_10.jpg")
  3. x = graph.get_tensor_by_name("input_x:0")                # 输入节点,RKNN转换模型时,input为"input_x"
  4. outlayer = graph.get_tensor_by_name("outlayer:0")     # 输出节点,RKNN转换模型时,output为"outlayer"
  5. prob = graph.get_tensor_by_name("probability:0")       # 输出节点,RKNN转换模型时,output为"probability"
  6. predict = graph.get_tensor_by_name("predict:0")         # 输出节点,RKNN转换模型时,output为"predict"
复制代码
  1. # RKNN:需要的输入为(64, 64, 3)的UINT8类型矩阵,归一化和转float在模型转换时已定义好
  2. # 转换模型时,inputs和outputs列表可以tensor名得到,目前我们output只关心'probability',因此,outputs只设置成 outputs=['probability']
  3. rknn.load_tensorflow(tf_pb='../digital_gesture_recognition/model_2500/digital_gesture.pb',
  4.                                inputs=['input_x'],
  5.                                outputs=['probability'],
  6.                                input_size_list=[[INPUT_SIZE, INPUT_SIZE, 3]])
复制代码


3.3.4. 模型的推理
  1. # Tensorflow使用run进行推理
  2. with tf.Session(graph=graph) as sess:
  3.         np.set_printoptions(suppress=True)
  4.         out, prob, pred = sess.run([outlayer, prob,predict],feed_dict={x:mat})

  5.         print(out)
  6.         print(prob)
  7.         print(pred)
复制代码
  1. # RKNN使用inference进行推理
  2. outputs = rknn.inference(inputs=[image])
复制代码




作者: onepiece    时间: 2019-1-11 15:29
写的很详细!!!
作者: andornot    时间: 2019-1-11 16:12
我是流氓我怕谁 发表于 2019-1-11 15:39
adsfafdasdfFDSFDaf


作者: user_one    时间: 2019-1-16 09:23
andornot 发表于 2019-1-11 16:12

很棒很棒很棒很棒很棒很棒很棒很棒很棒很棒
作者: 123456    时间: 2019-1-25 08:54
user_one 发表于 2019-1-16 09:23
很棒很棒很棒很棒很棒很棒很棒很棒很棒很棒

加一+1+1+1+1+1+1
作者: administer    时间: 2019-1-26 17:13
学习学习
作者: duckduckgo    时间: 2019-2-11 01:49
很详细,辛苦了。
作者: linuxsky    时间: 2019-2-16 09:06
请问下这个能做到 几帧呢? 整个任务处理时间
作者: someone9388    时间: 2019-2-21 11:53
[toybrick@localhost rknn_test]$ python3 rknn_transfer.py
/usr/lib64/python3.6/site-packages/h5py/__init__.py:36: FutureWarning: Conversion of the second argument of issubdtype from `float` to `np.floating` is deprecated. In future, it will be treated as `np.float64 == np.dtype(float).type`.
  from ._conv import register_converters as _register_converters
--> Init runtime environment
Traceback (most recent call last):
  File "rknn_transfer.py", line 12, in <module>
    ret = rknn.init_runtime(host='rk3399pro')
TypeError: init_runtime() got an unexpected keyword argument 'host'

遇到一个错误

作者: someone9388    时间: 2019-2-21 12:01
你好 遇到一个错误, 没有HOST 参数名:
[toybrick@localhost rknn_test]$ python3 rknn_transfer.py
/usr/lib64/python3.6/site-packages/h5py/__init__.py:36: FutureWarning: Conversion of the second argument of issubdtype from `float` to `np.floating` is deprecated. In future, it will be treated as `np.float64 == np.dtype(float).type`.
  from ._conv import register_converters as _register_converters
--> Init runtime environment
Traceback (most recent call last):
  File "rknn_transfer.py", line 12, in <module>
    ret = rknn.init_runtime(host='rk3399pro')
TypeError: init_runtime() got an unexpected keyword argument 'host'
麻烦指导解决一下
作者: someone9388    时间: 2019-2-21 12:06
someone9388 发表于 2019-2-21 12:01
你好 遇到一个错误, 没有HOST 参数名:
[toybrick@localhost rknn_test]$ python3 rknn_transfer.py
/usr ...

安装的是
rknn_toolkit-0.9.8-cp36-cp36m-linux_aarch64.whl
作者: engin    时间: 2019-2-21 22:59
someone9388 发表于 2019-2-21 12:06
安装的是
rknn_toolkit-0.9.8-cp36-cp36m-linux_aarch64.whl

遇到同样的问题,0.9.8版本已经改为了自动识别host类型,删掉后正常;推测是修改功能时调整的参数接口。
可以直接删掉这个参数进行使用
作者: troy    时间: 2019-2-26 16:40
someone9388 发表于 2019-2-21 12:01
你好 遇到一个错误, 没有HOST 参数名:
[toybrick@localhost rknn_test]$ python3 rknn_transfer.py
/usr ...

RKNN版本问题,最新的RKNN已经取消host参数,直接删除host参数即可
作者: troy    时间: 2019-2-26 16:42
linuxsky 发表于 2019-2-16 09:06
请问下这个能做到 几帧呢? 整个任务处理时间

这个demo比较简单,不怎么考虑性能,仅做演示使用。目前rknn的python推理接口存在耗时久的问题,后续会发布版本修复python推理慢的问题。
追求性能后续可以考虑多线程处理,或者直接使用C 的rknn进行开发。
作者: troy    时间: 2019-2-26 17:26
someone9388 发表于 2019-2-21 12:01
你好 遇到一个错误, 没有HOST 参数名:
[toybrick@localhost rknn_test]$ python3 rknn_transfer.py
/usr ...

新版rknn取消host参数,直接删除host参数即可
作者: 15875649641    时间: 2019-5-28 13:45
您好 请问能提供
tensorflow-1.8.0-cp36-cp36m-linux_aarch64.whl
rknn-toolkit-0.9.7-cp36-cp36m-linux_aarch64.whl
这两个的资源吗
网上没找着
作者: troy    时间: 2019-5-28 17:26
15875649641 发表于 2019-5-28 13:45
您好 请问能提供
tensorflow-1.8.0-cp36-cp36m-linux_aarch64.whl
rknn-toolkit-0.9.7-cp36-cp36m-linux_aa ...

wiki上面有安装流程,而且最新发布的固件在帖子上有发布,现在最新的已经是rknn-toolkit 1.0.0了
作者: 15875649641    时间: 2019-5-28 22:06
troy 发表于 2019-5-28 17:26
wiki上面有安装流程,而且最新发布的固件在帖子上有发布,现在最新的已经是rknn-toolkit 1.0.0了 ...

OK 蟹蟹~
作者: 15875649641    时间: 2019-5-30 00:15
您好 在跑例程的时候出现
RKNN INIT FAILED  error code RKNN_ERR_DEVICE_UNAVAILABLE
Init runtime environment failed
请问这个应该如何解决

图片链接如下:

作者: gwill    时间: 2019-6-14 22:09
请问有百度云的下载链接吗?github下载一直失败!
作者: troy    时间: 2019-6-17 09:05
gwill 发表于 2019-6-14 22:09
请问有百度云的下载链接吗?github下载一直失败!

这个demo的主体是在GitHub上的,我们百度云只有自己部分代码的链接。
作者: TryYourBest    时间: 2019-6-26 14:01
本帖最后由 TryYourBest 于 2019-6-26 14:21 编辑
someone9388 发表于 2019-2-21 12:01
你好 遇到一个错误, 没有HOST 参数名:
[toybrick@localhost rknn_test]$ python3 rknn_transfer.py
/usr ...

你好,我在测试过程中也遇到了同样的问题(File "rknn_camera.py", line 22, in load_model    ret = rknn.init_runtime(host='rk3399pro')
TypeError: init_runtime() got an unexpected keyword argument 'host'

请问你的问题解决了么,如已解决,望请指教,谢谢

作者: 1074292224    时间: 2019-6-28 11:36
运行rknn_transfer.py时报错:
--> Init runtime environment
E Model is not loaded yet, this interface should be called after build or load_rknn!
Init runtime environment failed
请问大神,这个是什么原因呢?

作者: 瓜瓜瓜    时间: 2019-7-12 15:20
运行python3 rknn_transfer.py 报错,请问怎么解决?

[root@localhost rknn_test]# python3 rknn_transfer.py
/usr/lib64/python3.6/site-packages/h5py/__init__.py:36: FutureWarning: Conversion of the second argument of issubdtype from `float` to `np.floating` is deprecated. In future, it will be treated as `np.float64 == np.dtype(float).type`.
  from ._conv import register_converters as _register_converters
--> Init runtime environment
E Model is not loaded yet, this interface should be called after build or load_rknn!
Init runtime environment failed

作者: 瓜瓜瓜    时间: 2019-7-12 17:29
请问跑手势识别的demo的时候,预测标签一直是0,然后概率一直是-65504.0,请问是怎么回事?
作者: troy    时间: 2019-7-14 14:42
瓜瓜瓜 发表于 2019-7-12 15:20
运行python3 rknn_transfer.py 报错,请问怎么解决?

[root@localhost rknn_test]# python3 rknn_transfer ...

rknn已经有比较大的更新,需要自己对照文档修改代码适配下新的rknn-ToolKit
作者: shajiayu    时间: 2019-7-27 00:01
瓜瓜瓜 发表于 2019-7-12 17:29
请问跑手势识别的demo的时候,预测标签一直是0,然后概率一直是-65504.0,请问是怎么回事? ...

我跟你的现象一样啊,你的问题解决了吗?
作者: lihh    时间: 2019-8-1 12:48
1074292224 发表于 2019-6-28 11:36
运行rknn_transfer.py时报错:
--> Init runtime environment
E Model is not loaded yet, this interface  ...

请问你解决了吗   我也遇到同样的问题   
作者: lihh    时间: 2019-8-1 12:49
瓜瓜瓜 发表于 2019-7-12 15:20
运行python3 rknn_transfer.py 报错,请问怎么解决?

[root@localhost rknn_test]# python3 rknn_transfer ...

和23楼一样么
作者: lihh    时间: 2019-8-1 16:01
hisping 发表于 2019-8-1 15:54
rknn_test.zip已更新,可以在rknn-toolkit 1.0.0运行

五分钟之前更新的吗   哈哈哈  
是不是有太多想复制这个demo的人问这个问题
感谢版主帮忙解决这个问题
谢谢
作者: lyc202019    时间: 2019-8-13 10:55
C:\Users\Administrator\Desktop\微信图片_20190813105303.png
作者: lyc202019    时间: 2019-8-13 11:12
no module named 'rknn'.
这个错误怎么解决?
作者: troy    时间: 2019-8-13 14:43
lyc202019 发表于 2019-8-13 11:12
no module named 'rknn'.
这个错误怎么解决?

按照wiki,安装下开发环境
作者: lyc202019    时间: 2019-8-13 16:24
Could not connect to any X display
这个问题怎么解决?
作者: lyc202019    时间: 2019-8-13 16:27
troy 发表于 2019-8-13 14:43
按照wiki,安装下开发环境

谢谢,找到了,安装rknn-api,rknn_took,
作者: troy    时间: 2019-8-13 17:15
lyc202019 发表于 2019-8-13 16:24
Could not connect to any X display
这个问题怎么解决?

必须要在界面下才能显示,命令行登录是不能显示的,就会报错。
作者: lyc202019    时间: 2019-8-13 17:32
troy 发表于 2019-8-13 17:15
必须要在界面下才能显示,命令行登录是不能显示的,就会报错。

我安装了xrdp,使用远程桌面登录的。是有界面的
作者: ddcat1991    时间: 2020-2-18 21:42
本帖最后由 ddcat1991 于 2020-2-18 21:46 编辑

你好,我在设置 do_quantization=True 转换上述手势识别的pb模型的时候, 产生如下错误。 (如果使用do_quantization=False时没有错误提示,并且能顺利生成rknn模型).

使用的版本:
* Debian10
* tf 1.14.0
* rknn 1.3.0

  1. Please use `rate` instead of `keep_prob`. Rate should be set to `rate = 1 - keep_prob`.
  2. E Catch exception when building RKNN model!
  3. E Traceback (most recent call last):
  4. E   File "rknn/api/rknn_base.py", line 737, in rknn.api.rknn_base.RKNNBase.build
  5. E   File "rknn/api/rknn_base.py", line 1644, in rknn.api.rknn_base.RKNNBase._quantize2
  6. E   File "rknn/base/RKNNlib/app/medusa/quantization.py", line 105, in rknn.base.RKNNlib.app.medusa.quantization.Quantization.run
  7. E   File "rknn/base/RKNNlib/app/medusa/quantization.py", line 44, in rknn.base.RKNNlib.app.medusa.quantization.Quantization._run_quantization
  8. E   File "rknn/base/RKNNlib/app/medusa/workspace.py", line 129, in rknn.base.RKNNlib.app.medusa.workspace.Workspace.run
  9. E   File "rknn/base/RKNNlib/app/medusa/workspace.py", line 99, in rknn.base.RKNNlib.app.medusa.workspace.Workspace._setup_graph
  10. E   File "rknn/base/RKNNlib/app/medusa/workspace.py", line 100, in rknn.base.RKNNlib.app.medusa.workspace.Workspace._setup_graph
  11. E   File "rknn/base/RKNNlib/RKNNnetbuilder.py", line 274, in rknn.base.RKNNlib.RKNNnetbuilder.RKNNNetBuilder.build
  12. E   File "rknn/base/RKNNlib/RKNNnetbuilder.py", line 278, in rknn.base.RKNNlib.RKNNnetbuilder.RKNNNetBuilder.build
  13. E   File "rknn/base/RKNNlib/RKNNnetbuilder.py", line 305, in rknn.base.RKNNlib.RKNNnetbuilder.RKNNNetBuilder.build_layer
  14. E   File "rknn/base/RKNNlib/RKNNnetbuilder.py", line 305, in rknn.base.RKNNlib.RKNNnetbuilder.RKNNNetBuilder.build_layer
  15. E   File "rknn/base/RKNNlib/RKNNnetbuilder.py", line 305, in rknn.base.RKNNlib.RKNNnetbuilder.RKNNNetBuilder.build_layer
  16. E   File "rknn/base/RKNNlib/RKNNnetbuilder.py", line 331, in rknn.base.RKNNlib.RKNNnetbuilder.RKNNNetBuilder.build_layer
  17. E   File "rknn/base/RKNNlib/RKNNnetbuilder.py", line 336, in rknn.base.RKNNlib.RKNNnetbuilder.RKNNNetBuilder.build_layer
  18. E   File "rknn/base/RKNNlib/layer/RKNNlayer.py", line 287, in rknn.base.RKNNlib.layer.RKNNlayer.RKNNLayer.compute_tensor
  19. E   File "rknn/base/RKNNlib/layer/dropout.py", line 20, in rknn.base.RKNNlib.layer.dropout.Dropout.compute_out_tensor
  20. E   File "/home/toybrick/.local/lib/python3.7/site-packages/tensorflow/python/util/deprecation.py", line 507, in new_func
  21. E     return func(*args, **kwargs)
  22. E   File "/home/toybrick/.local/lib/python3.7/site-packages/tensorflow/python/ops/nn_ops.py", line 4170, in dropout
  23. E     return dropout_v2(x, rate, noise_shape=noise_shape, seed=seed, name=name)
  24. E   File "/home/toybrick/.local/lib/python3.7/site-packages/tensorflow/python/ops/nn_ops.py", line 4219, in dropout_v2
  25. E     "range [0, 1), got %g" % rate)
  26. E ValueError: rate must be a scalar tensor or a float in the range [0, 1), got 1
  27. --> Building model
复制代码


代码如下:
  1. from rknn.api import RKNN

  2. INPUT_SIZE = 64

  3. if __name__ == '__main__':
  4.     model_file_path = '../digital_gesture_recognition/model_2500/digital_gesture.pb'
  5.    
  6.     rknn = RKNN()
  7.    
  8.     print("--> Init rknn enviroment")
  9.    
  10.     # ret = rknn.init_runtime()
  11.    
  12.     rknn.load_tensorflow(tf_pb=model_file_path,
  13.                      inputs=['input_x'],
  14.                      outputs=['probability'],
  15.                      input_size_list=[[INPUT_SIZE, INPUT_SIZE, 3]])
  16.     print("--> Model Loaded")
  17.    
  18.     rknn.config(channel_mean_value='0 0 0 255', reorder_channel='0 1 2')
  19.     print("--> Init config")
  20.    
  21.     rknn.build(do_quantization=True, dataset='./dataset_64x64.txt')
  22.     # rknn.build(do_quantization=False)
  23.     print('--> Building model')
  24.    
  25.     rknn.export_rknn('./digital_gesture.rknn')
  26.     rknn.release()
  27.    
  28.     print('Done')
复制代码


请问这个调用tf的droput_v2报错的问题应该怎么解决?


作者: troy    时间: 2020-2-19 10:07
ddcat1991 发表于 2020-2-18 21:42
你好,我在设置 do_quantization=True 转换上述手势识别的pb模型的时候, 产生如下错误。 (如果使用do_quant ...

这个是因为量化时会使用dataset的数据,在TensorFlow下先运行模型,这个属于TensorFlow版本兼容性的问题。pb模型生成时,使用的是比较旧的TensorFlow生成的,当前的TensorFlow运行异常。
另,这个demo只是rknn刚出来时,用作演示的demo,模型本身比较简单,而且准确率不高,不建议使用该模型,且该demo已经不维护了,建议选用其他模型,如yolov3或者ssd进行入手。
作者: wangcheng    时间: 2020-10-28 21:17
摄像头驱动怎么解决啊?
作者: zhaozhenxing    时间: 2020-11-5 15:41
很赞很赞很赞很赞很赞很赞很赞很赞奥
作者: Bone1    时间: 2021-4-21 21:07
很详细,辛苦了。该例程成功实现
作者: jackson    时间: 2021-5-13 20:05
我运行了这个demo,错误率好高啊
作者: jackson    时间: 2021-5-13 20:06
我运行了这个demo,错误率好高啊
作者: troy    时间: 2021-5-14 08:49
jackson 发表于 2021-5-13 20:06
我运行了这个demo,错误率好高啊

这个例程主要是实验性质的,模型比较简单,错误率搞是正常的。主要用于演示整个数据采集,数据处理,数据训练,数据推理的流程。如果要提供正确率,需要更换更复杂的模型才行。
作者: hiCrystal    时间: 2021-7-30 14:54
标题: 执行python rknn_camera.py时遇到问题
本帖最后由 hiCrystal 于 2021-7-30 14:59 编辑

设备是rv1126
作者: troy    时间: 2021-8-2 10:00
hiCrystal 发表于 2021-7-30 14:54
设备是rv1126

可以尝试一下v4l2命令对video节点进行抓图,当前TB-rv1126D开发板,video0节点是typec投屏输入,video19节点是mipi camera。
测试video0时应该接上手机,开启投屏输入。
测试video19时应该接入mipi camera。
根据按照以下命令,根据需要修改video节点,抓取的NV12_1920_1080.out可以去网上下载7yuv工具进行查看,是否正常。
  1. sudo v4l2-ctl -d /devideo19 --set-fmt-video=width=1920,height=1080,pixelformat=NV12 --stream-mmap=3 --stream-to=/tmp/NV12_1920_1080.out --stream-count=3 --stream-skip=10 --stream-poll
复制代码

确认是video的问题还是opencv库的问题。
作者: hiCrystal    时间: 2021-8-2 11:33
troy 发表于 2021-8-2 10:00
可以尝试一下v4l2命令对video节点进行抓图,当前TB-rv1126D开发板,video0节点是typec投屏输入,video19 ...

这个命令在哪执行呀?命令的详细使用说明有文档吗?
作者: troy    时间: 2021-8-2 11:44
hiCrystal 发表于 2021-8-2 11:33
这个命令在哪执行呀?命令的详细使用说明有文档吗?

这个命令在板子上执行,v4l2 --help可以获取帮助信息,或者百度可以查找到。这个是开源的工具,不是我们公司写的,还有media-ctl也是常有调试camera的工具,可以查看camera的拓扑信息。
作者: hiCrystal    时间: 2021-8-2 12:43
troy 发表于 2021-8-2 11:44
这个命令在板子上执行,v4l2 --help可以获取帮助信息,或者百度可以查找到。这个是开源的工具,不是我们 ...

好的,谢谢!我先试一下。
作者: zx123    时间: 2021-8-11 18:07
请问下../digital_gesture_recognition/model_2500/digital_gesture.pb这个数据模型在哪里可以获得
作者: troy    时间: 2021-8-11 19:33
zx123 发表于 2021-8-11 18:07
请问下../digital_gesture_recognition/model_2500/digital_gesture.pb这个数据模型在哪里可以获得 ...

可以自己训练。
作者: zx123    时间: 2021-8-12 09:15
troy 发表于 2021-8-11 19:33
可以自己训练。

没有数据咋训练呢
作者: zx123    时间: 2021-8-13 21:51
troy 发表于 2021-5-14 08:49
这个例程主要是实验性质的,模型比较简单,错误率搞是正常的。主要用于演示整个数据采集,数据处理,数据 ...

你好,你有这个数据集吗

作者: zx123    时间: 2021-8-13 21:54
hiCrystal 发表于 2021-7-30 14:54
设备是rv1126

请问下你有这个训练的数据模型吗
作者: troy    时间: 2021-8-15 10:01
zx123 发表于 2021-8-13 21:54
请问下你有这个训练的数据模型吗

demo里面有完成的数据采集,数据训练,只是为了演示完整的训练推理流程。
作者: AI_XIEQF    时间: 2021-10-13 22:42
hiCrystal 发表于 2021-8-2 12:43
好的,谢谢!我先试一下。

请问rv1126使用usb摄像头使用什么命令实现呢?

作者: AI_XIEQF    时间: 2021-10-13 22:43
troy 发表于 2021-8-2 11:44
这个命令在板子上执行,v4l2 --help可以获取帮助信息,或者百度可以查找到。这个是开源的工具,不是我们 ...

请问rv1126使用usb摄像头使用什么命令实现呢?我没有mipi的摄像头


作者: troy    时间: 2021-10-14 16:23
AI_XIEQF 发表于 2021-10-13 22:43
请问rv1126使用usb摄像头使用什么命令实现呢?我没有mipi的摄像头

只要能看到usb摄像头的节点,修改下脚本中的video节点就能进行拍照。
作者: zhulu    时间: 2021-11-4 17:41
load_tensorflow的时候input,output节点不知道怎么找到,tensorflow自带的,netron工具都用了,但节点太多了,不知道找那个节点
作者: ai开发者    时间: 2021-11-6 10:26
E Traceback (most recent call last):
E   File "rknn\base\RKNNlib\converter\convert_tf.py", line 1179, in rknn.base.RKNNlib.converter.convert_tf.convert_tf.match_paragraph_and_param
E   File "rknn\base\RKNNlib\RKNNnet.py", line 214, in rknn.base.RKNNlib.RKNNnet.RKNNNet.new_layer
E   File "rknn\api\rknn_log.py", line 312, in rknn.api.rknn_log.RKNNLog.e
E ValueError: Unknow layer "randomuniform"
E During handling of the above exception, another exception occurred:
E Traceback (most recent call last):
E   File "rknn\api\rknn_base.py", line 231, in rknn.api.rknn_base.RKNNBase.load_tensorflow
E   File "rknn\base\RKNNlib\RK_nn.py", line 51, in rknn.base.RKNNlib.RK_nn.RKnn.load_tensorflow
E   File "rknn\base\RKNNlib\app\importer\import_tensorflow.py", line 205, in rknn.base.RKNNlib.app.importer.import_tensorflow.Importensorflow.run
E   File "rknn\base\RKNNlib\converter\convert_tf.py", line 1278, in rknn.base.RKNNlib.converter.convert_tf.convert_tf.match_paragraph_and_param
E   File "rknn\api\rknn_log.py", line 312, in rknn.api.rknn_log.RKNNLog.e
E ValueError: Try match RandomUniform dropout/random_uniform/RandomUniform failed, catch exception!
Traceback (most recent call last):
  File "G:/git_projects/CarLicense/rknn_test/rknn_transfer.py", line 33, in <module>
    transfer('../train-saver/digits/lpr_predict.pb', './lpr_digits_predict.rknn')
  File "G:/git_projects/CarLicense/rknn_test/rknn_transfer.py", line 23, in transfer
    rknn.build(do_quantization=False)
  File "D:\anaconda3\envs\tensorflow\lib\site-packages\rknn\api\rknn.py", line 241, in build
    inputs = self.rknn_base.net.get_input_layers()
AttributeError: 'NoneType' object has no attribute 'get_input_layers'
我遇到了上面的错误,请问能指导解决一下吗
作者: troy    时间: 2021-11-15 08:38
ai开发者 发表于 2021-11-6 10:26
E Traceback (most recent call last):
E   File "rknn\base\RKNNlib\converter\convert_tf.py", line 1179 ...

这个demo是19年刚出来时演示用的,已经不匹配现在的rknn版本的,需要自行修改。
作者: yyyy    时间: 2022-2-11 16:56
我运行为什么卡住了,一直显示Done但是就是没有摄像头的画面,是配套的usb摄像头
作者: troy    时间: 2022-2-14 08:33
yyyy 发表于 2022-2-11 16:56
我运行为什么卡住了,一直显示Done但是就是没有摄像头的画面,是配套的usb摄像头 ...

把推理循环里面的rknn推理去掉,试一下读取和显示有没有异常。
作者: luffy    时间: 2022-6-2 13:33
RK3399上运行,摄像头打不开怎么回事啊

file:///C:/Users/QianQian/Desktop/%E5%BE%AE%E4%BF%A1%E5%9B%BE%E7%89%87_20220602133141.png



作者: troy    时间: 2022-6-7 08:56
luffy 发表于 2022-6-2 13:33
RK3399上运行,摄像头打不开怎么回事啊

确认下以下几点
1. USB Camera在PC上是否能正常使用
2. 切换下USB camera的读取节点,插入USB camera会新增两个video节点,这两个节点都试一下
3. 使用的是什么方式打开摄像头, v4l2还是Python还是播放器。
作者: ccx    时间: 2022-10-18 10:36
请问这个直播回放有备份吗,腾讯视频好像卡看不了了,希望能解答一下
作者: ml2546    时间: 2023-2-22 16:54
我遇到一个报错说是rknn.config(channel_mean_value='0 0 0 255', reorder_channel='0 1 2')里面的channel_mean_value已经不能用了,让我换成mean_values。
我想问一下这个能直接改成mean_values[[0,0,0,255]]吗,如果不行要怎么改?
作者: Ross    时间: 2023-4-2 18:56
yyyy 发表于 2022-2-11 16:56
我运行为什么卡住了,一直显示Done但是就是没有摄像头的画面,是配套的usb摄像头 ...

你好,请问你这个问题解决了吗,我也是运行了rknn_camera.py之后就显示done之后就卡住了,没显示摄像头的画面




欢迎光临 Toybrick (https://t.rock-chips.com/) Powered by Discuz! X3.3