1 Star 0 Fork 1

taj5 / uav-det

加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
克隆/下载
贡献代码
同步代码
取消
提示: 由于 Git 不支持空文件夾,创建文件夹后会生成空的 .keep 文件
Loading...
README
MIT

M400项目说明

工程结构

  • data 测试图像目录,包含uav.jpg无人机 bird.jpg小鸟两张测试图像
  • inc 头文件目录
  • lib 库目录,只包含mstar_i6e平台的库
  • src 源文件目录
    • ipu.h/cpp ipu推理模块
    • client.cpp 侦测客户端程序
    • server.cpp 跟踪服务端程序
    • util.h/cpp 工具模块 包括pLog简单控制台输出 MyTickMeter代码耗时测试 LogI/LogW/LogE文件日志
    • test_ipu.cpp ipu推理模块测试程序
  • Makefile 构建脚本

构建

$ make test-ipu 

$ make cli # 构建客户端程序

$ make srv # 构建服务端程序

服务端程序说明

# udp协议
# 服务端192.168.1.241:8000 
# 客户端192.168.1.100:8001
  1. 初始化
    • ipu初始化
    • socket初始化
    • 相机sdk初始化
    • 侦测相机信息链表(DetCameraTable)初始化,按顺序优先级依次降低,头部元素优先级最高,尾部元素优先级最低,侦测信息包含以下信息
      • ip地址
      • 侦测统计 found_
      • 最近一次更新时间
      • 调整权重
      • PTZ信息(PT预置位、Z毫米数)
  2. 注册YUV回调
  3. 主线程执行recvfrom接收循环,循环执行以下动作
    • 数据包解析
    • 更新DetCameraTable的侦测统计
    • 根据该统计数据和跟踪线程状态,判断是否需要执行跟踪
      • 粗调 控制云台转到预置位
      • 细调 根据XY调整PT, 根据目标大小调整Z
      • 获取YUV回调线程识别信息
        • 如果在N帧内未发现目标,则认为侦测信息是伪目标
        • 调整改侦测信息在链表中的位置,调整优先级
        • 如果发现目标,开启跟踪线程,执行跟踪

经过分析,服务端应包含主线程、YUV回调线程、跟踪线程

  • 主线程需要和YUV线程交互,交互时机判断要执行跟踪且云台调整到位后,才去交互,获取识别结果。
  • 主线需控制并获取跟踪线程的信息(开启,判断是否结束)。
  • 跟踪线程无需和主线程交互,但是需要和YUV线程交互,获取识别结果/获取图像
  • YUV线程和其他线程的交互做一个请求/响应模型,例如:主线程发出识别请求,YUV线程识别图像给出结果。或开/关模型,即YUV收到开启识别信号后,持续识别,收到关闭识别信号后,停止识别。

AJ DEV SDK 简要说明:

  1. 本套DEV SDK支持我司所有DSP方案

    1. HI3518C/3516C/3518EV100,对应make rule: rules.hi35xx.make
    2. HI3516A/3516D,对应make rule: rules.hi3516ad.make
    3. HI3518EV200,对应make rule: rules.hi3518ev200.make
    4. AMBAR S2L66,对应make rule: rules.ambar_s2l_v2.5.make
    5. S2L55M/S2L33M/S2L22M,对应make rule: rules.ambar_s2lm2.make
    6. TI DM365/DM368,对应make rule: rules.dm36x.make
    7. SSTAR 316D/313E/316DM,对应make rule: rules.mstar.make
    8. SSTAR 328Q,对应make rule: rules.mstar_i5.make
    9. SSTAR 325/335/337de,对应make rules: rules.mstar_i5uclibc.make
    10. SSTAR 338/339/30K,对应make rules: rules.mstar_i6e.make
  2. 根据开发板的DSP方案,安装编译工具链

  3. 修改上面相应的make rule中对应的MVTOOL_PREFIX变量值,指定编译工具链路径

  4. 参考demo实现code与makefile

  5. 编译前,先在make rule目录执行环境变量设置,如: source setenv_mstar_i5_uclibc 然后进入代码目录make

  6. IPCAMERA采用消息通信、共享内存等方式来实现多进程的协作,通过procman来进行进程维护,进程挂死时由procman立刻拉起。 使用DEV SDK开发的进程,可以替换rootfs中现有的ipvs_adaptor来实现由procman自动启动。

  7. DEMO中简单演示了如何使用回调函数来获取视频/音频编码数据/音频原始PCM数据。参数camera固定填0,stream 0表示主码流,1表示子码流。 MSTAR方案的音频PCM数据采样率固定为16000,通道数1. 获取/设置系统配置,参考devsdk.h。需要新增接口,请邮件联系cham.li@anjvision.com

  8. nfs调试运行demo 1)、telnet设备IP(23端口)。默认没有开启telnet,需要先telnet设备9999端口,输入telnet后回车,再telnet设备 2)、MSTAR 316D/313E/316DM方案模组的telnet,运行程序前需要先设置进程堆栈大小,否则会出现创建线程失败等错误: ulimit -s 256 3)、设置LIB路径,挂载NFS,如: export LD_LIBRARY_PATH="/mnt/app/app:/tmp/oem/app:/tmp:/lib:/usr/lib:/ext/lib:/usr/local/lib:/system/lib:/opt/ch:$LD_LIBRARY_PATH" mkdir -p /tmp/share mount -t nfs -o nolock 192.168.1.5:/ftp/ /tmp/share mount -t nfs -o nolock 192.168.1.200:/home/zw/M400/uav-det /tmp/share 4)、到挂载目录下执行编译好的程序。

  9. devsdk与IPC系统的配置GET/SET采用XML的方式进行传输,XML的生成与转换使用了libtools的函数。为避免IPC升级后结构变化导致与devsdk结构不同步,Makefile中请使用libdevsdk.a和libtools.a静态库进行链接。

  10. 335 16M FLASH NFS调试步骤(每个模组分区结构不一样,以下分区结构以及烧录脚本以创维定制为例): 1)确保16M FLASH能启动进入到UBOOT SHELL(可将公版8M FLASH烧录进入16M FLASH) 2)给模组加电,按住enter进入uboot shell 3)设置IP地址,例如: setenv ipaddr 192.168.1.10 setenv serverip 192.168.1.5 4)烧录16M FLASH的启动bin: tftp 0x21000000 BOOT_16M_CW.bin; sf probe 0; sf erase 0x0 0x100000; sf write 0x21000000 0x000000 0x100000; 5)reset之后设置启动参数: setenv ipaddr 192.168.1.10 setenv serverip 192.168.1.5 setenv bootcmd ' sf probe 0;sf read 0x21000000 0x00040000 0x00200000;bootm 0x21000000 setenv bootargs ' console=ttyS0,115200 root=/dev/mtdblock2 rootfstype=squashfs ro init=/linuxrc LX_MEM=0x3fe0000 mma_heap=mma_heap_name0,miu=0,sz=0x2000000 mma_memblock_remove=1 sa 6)烧录kernel和文件系统: sf probe 0;tftp 0x21000000 kernel_i6b0_nfs.xz.img; sf erase 0x00040000 0x00200000;sf write 0x21000000 0x00040000 0x00200000 sf probe 0;tftp 0x21000000 rootfs.mstar_i6b0.MSF12_V0_V3.0.2.5_CW; sf erase 0x00240000 0x00600000;sf write 0x21000000 0x00240000 0x00600000;re sf probe 0;sf erase 0x00840000 0x00200000; 7)烧录OEM分区数据 默认使用JFFS2挂载OEM分区,如果OEM分区空间不够,可定制为SQUASHFS文件系统挂载 8)NFS挂载命令: export LD_LIBRARY_PATH="/mnt/app/app:/tmp/oem/app:/tmp:/lib:/usr/lib:/ext/lib:/usr/local/lib:/system/lib:/opt/ch:$LD_LIBRARY_PATH" mkdir -p /tmp/share mount -t nfs -o nolock 192.168.1.5:/ftp/ /tmp/share cd /tmp/share

  11. 每个模组分区结构不一样,可根据开发情况来定制分区,以337DE创维定制为例,335 16M FLASH OEM分区结构: ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| | 28K IPL |32K IPL_CUST | 4K MXPT | 60K ROM | 4K KEY_CUST | 124K UBOOT | 4K UBOOT_ENV | 2M KERNEL | 5M ROOTFS | 1M DATA | 03904KB OEM1 | 03904KB OEM2 | 00128KB DATA2 |--------------- 128K MTD0 ---------------------------------|--------128K MTD3-----------|-- MTD1 -- | --- MTD2---|----MTD4----|---MTD5--------|---MTD6---------|---MTD7---|

    BOOT: 0x00000000-0x00020000 size: 0x00020000(00128KB) left:16256KB       0x00fe0000       mtd0

    KERNEL: 0x00040000-0x00240000 size: 0x00200000(02048KB) left:14080KB 0x00dc0000 mtd1 SYSTEM: 0x00240000-0x00740000 size: 0x00500000(05120KB) left:08960KB 0x008c0000 mtd2 UBOOT: 0x00020000-0x00040000 size: 0x00020000(00128KB) left:16128KB 0x00fc0000 mtd3 DATA: 0x00740000-0x00840000 size: 0x00100000(01024KB) left:07936KB 0x007c0000 mtd4 OEM1: 0x00840000-0x00C10000 size: 0x003D0000(03904KB) left:04032KB 0x003f0000 mtd5 OEM2: 0x00C10000-0x00FE0000 size: 0x003D0000(03904KB) left:00128KB 0x00020000 mtd6 DATA2: 0x00FE0000-0x01000000 size: 0x00020000(00128KB) left:00000KB 0000000000 mtd7

DATA分区为JFFS2挂载的可写分区,公版默认为256KB,以上定制335 16M FLASH OEM分区结构给DATA分区分了1MB,摄像机配置保存在这里。OEM的配置,也可以保存在这个分区。

nfs 挂载指令

  • On PC
    1. sudo apt install nfs-kernel-server
    2. cat "/path/to/project *(rw,sync,no_root_squash)" >> /etc/exports
    3. sudo systemctl restart nfs-server.service
  • On board
    1. telnet 192.168.1.10 23 root
    2. mount -t nfs -o nolock 192.168.1.100:/home/zwht/m400/uav-det /tmp/oem/zw

Test Dataset

Based on different backgroud

  • Tree 20#
  • Sun 20#
  • Night 20#
  • Buildings 20#
  • Rainy 20#

模块

  1. 日志
LogI("Hello world")
LogE("Hello {}", p)
LogW("Hello {}", t)

是否会存爆?日志如何导出?是否支持中文?

client 给 server 发送数据

没有侦测到目标时发送 00 00 00 00 00 00 00 00 0d 0a 有目标时发送坐标,例如:00 64 00 64 00 64 00 64 0d 0a

MIT License Copyright (c) 2023 taj5 Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.

简介

m400 detect and track 展开 收起
C++ 等 4 种语言
MIT
取消

发行版

暂无发行版

贡献者

全部

近期动态

加载更多
不能加载更多了
1
https://gitee.com/taj5/uav-det.git
git@gitee.com:taj5/uav-det.git
taj5
uav-det
uav-det
master

搜索帮助