yinxx

  • 2024-11-20
  • 回复了主题帖: 嵌入式工程师AI挑战营(进阶):在RV1106部署InsightFace算法的多人实时人脸识别实战

    insightface是一个开源的基于Pytorch和MXNet实现的2D/3D人脸分析工具,它实现了多个SOTA人脸识别、人脸检测、人脸对齐算法,并对训练和部署进行了优化。insightface用的是5个特征点检测,因此算法资源要求相对较少,容易在嵌入式系统上进行部署和实现。 使用 RV1106 的 SDK 和工具链(如 Rockchip 的 RKNN Toolkit)来优化和部署模型。使用 TensorFlow Lite 或 PyTorch,安装 OpenCV 和 dlib 等库用于图像处理和人脸检测。InsightFace 提供了多个预训练模型。选择一个适合实时处理的轻量级模型,如 ResNet 或 MobileFaceNet。 优化模型。使用 TensorFlow Lite 或 ONNX 格式来将模型转换为适合移动端或嵌入式设备的轻量级格式。使用 Quantization(量化)等方法来减少模型大小和计算量,尤其是对于硬件加速的 NPU 可以提高推理速度。使用 RKNN Toolkit 将模型转换为 RV1106 可识别的格式,并利用 NPU 提供的加速。  Step 1:获取带有摄像头的RV1106开发板。 Step 2:熟悉并配置RV1106 SDK,下载并解压SDK文件,查看其目录结构,确保开发环境正常配置。 Step 3:进行交叉编译。 Step 4:部署InsightFace算法,确保算法支持多人实时人脸识别并在RV1106平台上正常运行。 Step 5:测试和调试,确保算法可以在复杂的环境下稳定运行,支持多人识别并实现实时反馈。 2. 具体应用  2.1 复杂场景下多人实时人脸识别:  家庭场景:通过本地化部署,在家庭环境中实现多人脸实时识别。此方案能够保证隐私安全,无需上传任何个人数据至云端。算法在不同光照、角度及遮挡情况下的表现将成为优化的重点。 会议场景:利用会议室内的多个摄像头和人脸数据进行实时识别,验证算法在多人环境下的实时性和准确性,进一步优化识别精度和响应速度。 通过这一部署和应用方案,我们希望能够探索如何在RV1106平台上实现高效的多人实时人脸识别,尤其是在智能家居中的隐私保护需求下,提供更加安全和高效的解决方案。  

  • 回复了主题帖: 有奖直播 | 报名STM32全球线上峰会,了解重磅新品!

     

  • 2024-10-04
  • 加入了学习《Verilog RTL编程实践》,观看 Verilog RTL编程实践 1

  • 2024-08-14
  • 回复了主题帖: >>征集 | 使用 MCU,哪些问题最令你头大?

    1、比如说,有些基本模块的功能演示不能够保持一致性,也就是说在stm32f103系列芯片上能够实现的功能,不能简单直接的移植到stm32h533这样的情形。 2、手册里面的文字描述似乎给人一种静悄悄的感觉,既不能在出现问题的时候及时的咨询回应,只能通过不断的思考和质疑,参考其他案例,或者sdk中携带的例子进行初步的实现,对于一下功能比较复杂的方式,就不能快速的定位问题和实现 3、既然已经有芯片手册,为什么不配套出一下对应的芯片手册解读和对应功能的实现方面的视频 4、或者建立一个反馈机制,能够及时解决一下看不明白,或者实现逻辑方面的问题

  • 2024-07-27
  • 回复了主题帖: 【NUCLEO H533RE】AES软硬件算法对比测试

    收藏、点赞!向作者的钻研精神致敬!!!

  • 2024-01-18
  • 发表了主题帖: 不完善的密码锁只好实现矩阵键盘

     作品名称:不完善的密码锁只好实现矩阵键盘 作者:yinxx # Include the library files import RPi.GPIO as GPIO from time import sleep # Enter column pins C1 = 5 C2 = 6 C3 = 13 C4 = 19 # Enter row pins R1 = 12 R2 = 16 R3 = 20 R4 = 21 keypadPressed = -1 # Enter your PIN secretCode = "1111" input = "" # Setup GPIO GPIO.setwarnings(False) GPIO.setmode(GPIO.BCM) # Set column pins as output pins GPIO.setup(C1, GPIO.OUT) GPIO.setup(C2, GPIO.OUT) GPIO.setup(C3, GPIO.OUT) GPIO.setup(C4, GPIO.OUT) # Set row pins as input pins GPIO.setup(R1, GPIO.IN, pull_up_down=GPIO.PUD_DOWN) GPIO.setup(R2, GPIO.IN, pull_up_down=GPIO.PUD_DOWN) GPIO.setup(R3, GPIO.IN, pull_up_down=GPIO.PUD_DOWN) GPIO.setup(R4, GPIO.IN, pull_up_down=GPIO.PUD_DOWN) # This callback registers the key that was pressed # if no other key is currently pressed def keypadCallback(channel): global keypadPressed if keypadPressed == -1: keypadPressed = channel # Detect the rising edges GPIO.add_event_detect(R1, GPIO.RISING, callback=keypadCallback) GPIO.add_event_detect(R2, GPIO.RISING, callback=keypadCallback) GPIO.add_event_detect(R3, GPIO.RISING, callback=keypadCallback) GPIO.add_event_detect(R4, GPIO.RISING, callback=keypadCallback) # Sets all rows to a specific state. def setAllRows(state): GPIO.output(C1, state) GPIO.output(C2, state) GPIO.output(C3, state) GPIO.output(C4, state) # Check or clear PIN def commands(): global input pressed = False GPIO.output(C1, GPIO.HIGH) # Clear PIN if (GPIO.input(R1) == 1): print("Input reset!"); sleep(1) pressed = True GPIO.output(C1, GPIO.HIGH) # Check PIN if (not pressed and GPIO.input(R2) == 1): if input == secretCode: print("Code correct!") else: print("Incorrect code!") pressed = True GPIO.output(C1, GPIO.LOW) if pressed: input = "" return pressed # reads the columns and appends the value, that corresponds # to the button, to a variable def read(column, characters): global input GPIO.output(column, GPIO.HIGH) if(GPIO.input(R1) == 1): input = input + characters[0] print(input) if(GPIO.input(R2) == 1): input = input + characters[1] print(input) if(GPIO.input(R3) == 1): input = input + characters[2] print(input) if(GPIO.input(R4) == 1): input = input + characters[3] print(input) GPIO.output(column, GPIO.LOW) try: while True: input = input("Enter your PIN: ") # If a button was previously pressed, # check, whether the user has released it yet if keypadPressed != -1: setAllRows(GPIO.HIGH) if GPIO.input(keypadPressed) == 0: keypadPressed = -1 else: sleep(0.1) # Otherwise, just read the input else: if not commands(): read(C1, ["D","C","B","A"]) read(C2, ["#","9","6","3"]) read(C3, ["0","8","5","2"]) read(C4, ["*","7","4","1"]) sleep(0.1) else: sleep(0.1) except KeyboardInterrupt: print("Stopped!")       首先我的想法是充分发挥手中的可以直接上手,最简单的方式使用的,最小方案吧。于是我决定还是弄个矩阵键盘的python程序控制看看。   按照这个接线方式进行连线,我不上图了,因为有参考视频。我最后的实现就是这个视频的样子。   [localvideo]285d674ba92a9461cbef8e76befedf2f[/localvideo]  

  • 2024-01-11
  • 发表了主题帖: 【DigiKey创意大赛】密码锁+矩阵键盘的读取python实现

    首先我的想法是充分发挥手中的可以直接上手,最简单的方式使用的,最小方案吧。于是我决定还是弄个矩阵键盘的python程序控制看看。 # Include the library files import RPi.GPIO as GPIO from time import sleep # Enter column pins C1 = 5 C2 = 6 C3 = 13 C4 = 19 # Enter row pins R1 = 12 R2 = 16 R3 = 20 R4 = 21 keypadPressed = -1 # Enter your PIN secretCode = "1111" input = "" # Setup GPIO GPIO.setwarnings(False) GPIO.setmode(GPIO.BCM) # Set column pins as output pins GPIO.setup(C1, GPIO.OUT) GPIO.setup(C2, GPIO.OUT) GPIO.setup(C3, GPIO.OUT) GPIO.setup(C4, GPIO.OUT) # Set row pins as input pins GPIO.setup(R1, GPIO.IN, pull_up_down=GPIO.PUD_DOWN) GPIO.setup(R2, GPIO.IN, pull_up_down=GPIO.PUD_DOWN) GPIO.setup(R3, GPIO.IN, pull_up_down=GPIO.PUD_DOWN) GPIO.setup(R4, GPIO.IN, pull_up_down=GPIO.PUD_DOWN) # This callback registers the key that was pressed # if no other key is currently pressed def keypadCallback(channel): global keypadPressed if keypadPressed == -1: keypadPressed = channel # Detect the rising edges GPIO.add_event_detect(R1, GPIO.RISING, callback=keypadCallback) GPIO.add_event_detect(R2, GPIO.RISING, callback=keypadCallback) GPIO.add_event_detect(R3, GPIO.RISING, callback=keypadCallback) GPIO.add_event_detect(R4, GPIO.RISING, callback=keypadCallback) # Sets all rows to a specific state. def setAllRows(state): GPIO.output(C1, state) GPIO.output(C2, state) GPIO.output(C3, state) GPIO.output(C4, state) # Check or clear PIN def commands(): global input pressed = False GPIO.output(C1, GPIO.HIGH) # Clear PIN if (GPIO.input(R1) == 1): print("Input reset!"); sleep(1) pressed = True GPIO.output(C1, GPIO.HIGH) # Check PIN if (not pressed and GPIO.input(R2) == 1): if input == secretCode: print("Code correct!") else: print("Incorrect code!") pressed = True GPIO.output(C1, GPIO.LOW) if pressed: input = "" return pressed # reads the columns and appends the value, that corresponds # to the button, to a variable def read(column, characters): global input GPIO.output(column, GPIO.HIGH) if(GPIO.input(R1) == 1): input = input + characters[0] print(input) if(GPIO.input(R2) == 1): input = input + characters[1] print(input) if(GPIO.input(R3) == 1): input = input + characters[2] print(input) if(GPIO.input(R4) == 1): input = input + characters[3] print(input) GPIO.output(column, GPIO.LOW) try: while True: input = input("Enter your PIN: ") # If a button was previously pressed, # check, whether the user has released it yet if keypadPressed != -1: setAllRows(GPIO.HIGH) if GPIO.input(keypadPressed) == 0: keypadPressed = -1 else: sleep(0.1) # Otherwise, just read the input else: if not commands(): read(C1, ["D","C","B","A"]) read(C2, ["#","9","6","3"]) read(C3, ["0","8","5","2"]) read(C4, ["*","7","4","1"]) sleep(0.1) else: sleep(0.1) except KeyboardInterrupt: print("Stopped!")    [localvideo]87d60915408e4fd858557be09a3f6afb[/localvideo] 这个是参考视频

  • 2024-01-02
  • 发表了主题帖: 【DigiKey创意大赛】作品名称+还是先尝试一下基础的实现

    处于最初对这个密码锁项目的不了解,以为简单看一看视频就可以完成整个项目 但是在实践过程中遇到的第一个问题就是 1、继电器是一个独立原件,不是模块,不能方便的直接与树莓派进行连接 2、然后就是驱动电磁阀的问题,据了解也不能直接与树莓派连接,说是有反电动势,会烧毁器件 真的很痛苦,难道人就是被痛苦驱动者的吗? 我只好先抽时间弄一个blink的小实践 上视频 [localvideo]a7cd8ce315ef4ab80f6b59b5a2ed62e6[/localvideo] 后面如果有时间的话,在实现一个矩阵按键的小实践。 目前看来,程序方面都有很多参考的,网上也是一大堆,而对于我来说,困境竟然是硬件的资源不足,导致有些事情不能顺利进行。 希望大赛课题组能够体会我的困境 我也希望能够尽快突破  

  • 2023-12-22
  • 发表了主题帖: 【DigiKey“智造万物,快乐不停”创意大赛】电磁阀和继电器物理连线的确定

    拿到物料之后,有那么一段时间开始熟悉怎么进行连线。后来也跟着b站上面的视频学习了相关的章节。但是发现里面用到的都是模块化的器件,而我在本次 活动中采用的都是独立的元器件,难不成还要自己画个pcb板子,才可以正常使用那个继电器来控制电磁阀吗? 我正在郁闷中。 后来在网上开始了解能不能直接的进行物理电气的连接,就是直接用杜邦线连接继电器先。 这个原理图跟我的手里面的原件结构比较相似,但是我最终希望实现的结构是这个样子的: 当然这个是过于完美的一张连接图示,因为我的原件只能够做最基本的连接处理。 但是目前就是卡在这里了。 我不清楚怎么进行物理连接,我正在熟悉这个过程,但是对于代码方面的话,目前的问题应该不是很大。 比如说我最后要实现继电器控制电磁阀通过gpio口 控制电磁阀的代码 ## 代码 ```python import RPi.GPIO as GPIO import time # 设置GPIO引脚模式为BCM GPIO.setmode(GPIO.BCM) # 定义电磁阀引脚 solenoid_pin = 17 # 设置电磁阀引脚为输出模式 GPIO.setup(solenoid_pin, GPIO.OUT) # 主循环 while True: # 打开电磁阀 GPIO.output(solenoid_pin, GPIO.HIGH) time.sleep(1) # 保持电磁阀打开1秒 # 关闭电磁阀 GPIO.output(solenoid_pin, GPIO.LOW) time.sleep(1) # 保持电磁阀关闭1秒 ``` ## 说明 * 在此代码中,我们将电磁阀引脚设置为17,但您可以根据您的实际情况进行修改。 * 在主循环中,我们将电磁阀打开1秒,然后关闭1秒,您可以根据您的需要调整时间。 * 当您运行此代码时,电磁阀将不断打开和关闭,您可以通过观察来验证其工作是否正常。 * 当您需要停止运行此代码时,请按Ctrl+C组合键以退出程序并释放GPIO引脚 import RPi.GPIO as GPIO import time # Set the GPIO mode GPIO.setmode(GPIO.BCM) # Set the relay pin as output relay_pin = 4 # Change this to the pin you have connected the relay to GPIO.setup(relay_pin, GPIO.OUT) # Main loop while True: GPIO.output(relay_pin, GPIO.HIGH) # Turn on the solenoid valve time.sleep(1) # Wait for 1 second GPIO.output(relay_pin, GPIO.LOW) # Turn off the solenoid valve time.sleep(1) # Wait for 1 second 上面是独立的2段可以用来进行参考的代码 希望主办方不要着急,我也是尽力抽时间就开始熟悉,毕竟没人问,效率比较低。看来我要到群里面多说说话。

学过的课程

最近访客

< 1/2 >

统计信息

已有39人来访过

  • 芯积分:92
  • 好友:--
  • 主题:19
  • 回复:27

留言

你需要登录后才可以留言 登录 | 注册


现在还没有留言