A311D用工业相机APP获取raw图像并做各种格式转换

目录

主要涉及的知识点有:    2
RAW 图格式转换(主要意义)   2
Android 通用串口通信,及usb转串口通信 2
1先创建android_serialport_api包 2
2创建jni  2
3设置环境编译生成so 3
4实现操作类  4
5数据发送格式 5
Android studio 各种环境准备,及Android 各种控件使用,android 的调试方法   5
Android JNI 开发  5
ENVI 数据生成方法 5
ENVI打开生成的dat文件报错    5
导入 txt文件,及调用文件浏览器来打开相关文件,java层打开txt,及c++打开txt    5
android9获取sd卡权限失败   5
报错没有使用命名空间  6
python初涉    6
解读python    6
1下载python   7
2测试python   7
3添加环境变量 8
4测试 8
手机调用PFPI 出现问题及打开工业相机方法  9
demo使用说明:    9
存在问题及优缺点:    11

概述:
A311D(Android 9.1) + 迈德威视工业相机+ PFPI 模块,Android APP demo 项目开始时间是2020年1月07号,到今天2020年3月16日星期一,总共用时 6 个星期—— 一个半月,APP开发从小白到现在的一点点入门,还是非常有意义的

主要涉及的知识点有:

RAW 图格式转换(主要意义)
首先要根据文档,添加代码打印看相机有支持哪些数据格式先,利用打断点进行调试,可以一步步查看每个值是多少,然后计算得到数据格式
1.使用api 拍 raw 图,

2.获取到pRawData之后,一行一行的写
其中要好好分析写过程是否正确

Android 通用串口通信,及usb转串口通信

1先创建android_serialport_api包
在 MainActivity.java 同级 下 new package

就会产生一个 android_serialport_api 的目录

然后就 把 从 google 下载的 api
去Github上下载google-Serailport-api的源码,下载地址:Google-Serailport-api
下载下来以后


SerialPort.java 和 SerialPortFinder.java 给拷贝到 新建的 包里准备用来调用 jni 使用

2创建jni
在与 java 同级下创建 jni 目录

然后把从 去Github上下载google-Serailport-api的源码,下载地址:Google-Serailport-api
下载下来以后

把 jni 中的 文件全部拷贝过来

目的就是要用来生成 相关的 so

3设置环境编译生成so
首先要 安装 NDK

然后了解 JNI 是什么

还有就是 so 文件

详细请看 https://blog.csdn.net/u010976213/article/details/50816956

  1. 先安装 NDK 点击 tools 进入 SDK Tools

确认 NDK 下载好,然后 配置 环境变量 ,测试是否安装成功
cmd 命令 使用 ndk-build 来看是否可以使用

  1. 生成 so 库 https://blog.csdn.net/weixin_42676203/article/details/81561501

2.1 生成相关的 .h .c .mk 文件步骤略过,我们直接拷贝使用 google 下载的 文件,拷贝过来

2.2 然后生成 so 文件

a
首先创建一个 java 文件,使用
static {
System.loadLibrary(“serial_port”);
}
来装载 so ,因为拷贝的 google 文件中的 SerialPort.java 中已经有,就可以了

b
配置 gradle
在 app 下的 build.gradle 中添加

ndk {// 'armeabi-v7a', 'arm64-v8a', 'x86', 'x86_64'abiFilters "armeabi-v7a"//abiFilters "arm64-v8a"//abiFilters "x86"//abiFilters "x86_64"}sourceSets {main{jni.srcDirs = []      // 这个一定要加上,就不会自动编译 ,使用的就是我们自己的 mk文件了jniLibs.srcDirs 'src/main/libs'//  jniLibs.srcDirs = ['libs']}}buildTypes {

c
终端 进入工程的app\src\main 目录下,输入 ndk-build

然后报错
E:\android_studio_project\serialport\app\src\main>ndk-build

Android NDK: APP_PLATFORM not set. Defaulting to minimum supported version android-16.

就把 mk文件支持的版本降低

说明
Application.mk设置的ndk版本与使用的ndk版本不一致

解决方案
在Application.mk中添加或修改: 低版本的

APP_PLATFORM := android-14

APP_ABI := all

然后在终端使用 ndk-build 编译生成 so

ndk-build clean

4实现操作类
在 MainActivity.java 同级新建 类

GoogleSerialPortUtils 类名随便取

主要功能就是 打开 串口 、发送数据、接收数据、关闭串口 4个方法

然后接收数据使用线程功能

5数据发送格式
就是要解读我们的PFPI 模块的控制方式

Android studio 各种环境准备,及Android 各种控件使用,android 的调试方法

Android JNI 开发

ENVI 数据生成方法

ENVI打开生成的dat文件报错

Bands 数不一致 或者就是 wavelength 格式有问题 还有就是 fwhm 没有

ENVI 的dat 生成直接使用追加方式打开复制 Buffer进去就行

导入 txt文件,及调用文件浏览器来打开相关文件,java层打开txt,及c++打开txt

android9获取sd卡权限失败
https://blog.csdn.net/PlainWaterh/article/details/78341971

android6 之后 需要动态获取权限

报错没有使用命名空间
note: ‘std::ifstream’ declared here

using namespace std;

https://www.cnblogs.com/JCSU/articles/1190685.html

**

python初涉

**
解读python

    def setSetpoint(self, setpoint1):'''Set PFPI setpoint1 in hardware controller.Returns False if value of setpoint1 is outside of valid range.'''self._check_port()self._check_config()if not (self._config['min_sp1']<=setpoint1<=self._config['max_sp1']):return Falsesetpoints = self._computeSetpoints(setpoint1)adu = [int(round(x/2.5*65535)) for x in setpoints]s = ','.join([str(a) for a in adu])cmd = 'h' + s + '\r\n'#print(cmd)self._port.write(str.encode(cmd))return Truedef _computeSetpoints(self, setpoint1):'''Create 3-tuple of setpoint values from setpoint1'''return [setpoint1,self._polyval(self._config['piezo2'], setpoint1),self._polyval(self._config['piezo3'], setpoint1)]def _polyval(self, p, x):'''Evaluate polynomial p at x'''a = 0.for i in range(len(p)):a = a*x + p[i]return a

我们模块枚举情况

[ 36.606666@0] usb 1-1.1: new full-speed USB device number 4 using xhci-hcd
[ 36.772520@0] cdc_acm 1-1.1:1.0: ttyACM0: USB ACM device

设别成 虚拟 设备

虚拟的串行口

Bus 001 Device 013: ID 1fc9:0083

1下载python
2.7版本

并添加环境变量 才可以使用 cmd

或者 直接运行 exe 文件
C:\Users\Admin\Desktop\Python27>python.exe
Python 2.7.13 (v2.7.13:a06454b1afa1, Dec 17 2016, 20:53:40) [MSC v.1500 64 bit (AMD64)] on win32
Type “help”, “copyright”, “credits” or “license” for more information.

或者自己打开 python 先

2测试python
Python 2.7.13 (v2.7.13:a06454b1afa1, Dec 17 2016, 20:53:40) [MSC v.1500 64 bit (AMD64)] on win32
Type “help”, “copyright”, “credits” or “license” for more information.

print(“Hello Python”);
Hello Python

就说明可以的

3添加环境变量
https://www.runoob.com/python/python-install.html

命令行模式添加

C:\Users\Admin>path=%path%;C:\Python27

然后就可以使用环境变量 使用了 cmd 即可

C:\Users\Admin\Desktop\Driver_Adv>pip install configparser pyserial
‘pip’ 不是内部或外部命令,也不是可运行的程序
或批处理文件。

同样也是要添加环境变量

去添加对应的环境变量:C:\ Program Files \ Python36 \ Scripts到Path环境变量中去,因为改路径中包含了对应的PIP程序,所以这样就轻松的可以解决PIP无法运行的问题了右键点击:此电脑- >属性- >高级系统设置- >高级- >环境变量- >路径- >修改,添加成功以后就可以运行了

然后 cmd 使用 pip -h
即可

4测试
C:\Users\Admin\Desktop\Driver_Adv>pfpi_example.py

                Simple PFPI control script
========================================================
Opened config file.
Enter COM port number of device and press [ENTER]: COM4
Opened serial port COM4
Hardware ID: 18025025 AF080901 588562BD F5001985
Enter 'q' and [ENTER] to exit application.Enter a valid setpoint and press [ENTER]: 0.6
Setpoint set to: 0.6.
Enter a valid setpoint and press [ENTER]: 0.56
Setpoint set to: 0.56.

手机调用PFPI 出现问题及打开工业相机方法

  1. 修改 ttyACM0 权限

[ 753.647816@0] usb 1-1.1: new full-speed USB device number 5 using xhci-hcd
[ 753.793019@0] cdc_acm 1-1.1:1.0: ttyACM0: USB ACM device

  1. 通过 调用 usb 设备

./sys/bus/usb/drivers/cdc_acm

  1. 参考 usb serial 方式,直接读取 PID VID 方式
console:/ # lsusb
Bus 001 Device 005: ID 1fc9:0083console:/sys/bus/usb/drivers/usb/1-1.1 #
cat idVendor ;cat idProduct                                                    <
1fc9
0083

demo使用说明:

首先要准备两个文档,Exp.txt 和 PFPI 的波段值列表 PFPI_.txt,Exp.txt 复制到指定/sdcard/目录下,也就是内部存储的根目录下, PFPI_.txt就可以随意放置,因为这个是后面通过自己选择来指定路径的

首先工业相机接到 USB3.0口,PFPI模块可以任意USB口,然后确认 A311D 底部没有短路(不接触导电材料),使用华为手机充电器及数据线给板子供电,供电不足请外接hub给工业相机供电,确保有两类txt文件及两个模块连接正常,A311D开启后,点击 nano app,开启我们的demo,

1.先点击 《请选择文件~》选择我们的 PFPI ***.txt 加载配置,可以点击查看内容查看值,可以上下滚动查看全部值,想要某一固定值,可以通过输入控制 PFPI

2.预览正常后,点击 拍_ENVI

3.最后可以看到在内存空间根目录下有相关的 EVNI 文件及对应每一张raw图

存在问题及优缺点:

A311D用工业相机APP获取raw图像并做各种格式转换相关推荐

  1. VB.net / 工业相机SDK / 获取Halcon图像

    VB.net / 工业相机SDK / 获取Halcon图像 欧姆龙 MicroScan 相机启动: Public myFactory As New CFactory, myCamera As CCam ...

  2. RAW图像:手机拍摄DNG格式,分辨率是多少?

    Matlab提取DNG图像数据时,需要知道图像的分辨率,应该如何做呢? 我尝试了三种方法: (1)手机打开对应的图像,查看分辨率 --> 华为P30:成功,荣耀20:错误 (2)PhotoSho ...

  3. 图像指针与矩阵格式转换——Mat转uchar*及uchar*转Mat代码实现

    本篇文章实现RGB3通道图像Mat转uchar及uchar转Mat,编程环境:vs2013,opencv2.4.13 ,由于OpenCV读入和显示都是BGR类型,本文显示图像也用的BGR格式,若需换成 ...

  4. go 获取当前时间,以及时间格式转换

    参考:golang获取当前时间.时间戳和时间字符串及它们之间的相互转换 1.获取当前时间 time.Now() , 获取 年 月 日 时 分 秒 纳秒 以及 time.Date()的用法 备注:这里给 ...

  5. 【OpenCV】将图像数据由YUV格式转换成JPG格式直接使用,而不保存成文件

    解决方法 使用OpenCV图像编码和解码函数:imencode.imdecode std::vector data_encode; imencode(".png", img_enc ...

  6. Python使用rawpy获取相机图像的原始RAW数据

    使用相机拍摄的RAW图像,往往带有厂商自定义的文件头,而我只想获取到文件图像部分的原始Bayer数据,然后自己进行去噪.去马赛克.白平衡等ISP算法. 示例:获取索尼相机拍摄的.ARW文件中的原始图像 ...

  7. 乐视体感astra pro深度摄像头在ros系统获取 深度图像 彩色图像 无色彩点云数据 彩色点云数据

    1.astra pro深度摄像头介绍 2.astra pro驱动安装 3.astra pro获取深度图像   无色彩pointCloud2 4.astra pro获取彩色图像  带彩色的pointCl ...

  8. Qt 中获取摄像头图像数据的方法

    Qt 中获取摄像头图像数据的方法 在 Qt 中提供了 QCamera 类用来操作摄像头.(这里的摄像头指的是电脑上常用的那种 USB 摄像头或网络摄像头,暂时还不支持工业相机.)摄像头获取的实时图像可 ...

  9. 从相机raw图像到日常看到的jpeg图像

    通常我们看到的图像是经过相机系统的一系列处理得到的,对于相机工程师和算法研究人员而言,获取传感器原图像以及知道图像所经过的一系列处理过程有助于设计计算步骤或者调试参数来得到更令人满意的图像,本文简单模 ...

最新文章

  1. C语言windows编程编写窗口
  2. 分享一个开源的JavaScript统计图表库,40行代码实现专业统计图表
  3. Spring MVC拦截器示例
  4. C语言深度剖析书籍学习记录 第二章 符号
  5. php datediff 函数,dateAdd与DateDiff函数的js代码
  6. 2.3 快速搭建你的第一个系统,并进行迭代
  7. struts2:表单标签续(datetimepicker标签)
  8. Win8下用DOSBox编写汇编语言
  9. 阿里云推出全球云网络人才赋能计划,打造云网络认证体系
  10. php curl获取404,php使用curl判断网页404(不存在)的方法
  11. DLL注入explorer.exe进程
  12. Java毕业设计——员工管理系统
  13. JAVA TCP编程和UDP编程
  14. mysql怎么跨库查询_在MySQL中怎样进行跨库查询?
  15. 1.UITextField使用详解
  16. 边界值分析法用例设计
  17. vue 网络异常提示
  18. Windows 7/8 fails to install in VirtualBox, Status: 0xC0000225
  19. Python 屏幕亮度的调节与息屏
  20. 力扣122题:买卖股票的最佳时机 II

热门文章

  1. R语言 字符串提起数字,日期的最佳方法
  2. 小米鸿蒙os界面,早报 | 小米官宣第二款5G机;鸿蒙OS系统界面首曝
  3. 企业多维要素综合评分
  4. ​​​​​​​Log日志级别从高到低排序和log4j配置
  5. 蓝桥杯单片机国赛客观题_第十一届蓝桥杯青少年组Scratch竞赛规则与样题
  6. ARP地址解析协议与RARP逆地址解析协议
  7. ctf web基础中简单题的思路
  8. iOS开发--UIWebView
  9. Java中的线程休眠大法系列(三)LockSupport.park()
  10. 云市场合作伙伴目睹获近亿元融资,开启1元企业活动直播试用!