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

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 False
        setpoints = 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 True



def _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:0083

console:/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图

存在问题及优缺点:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

荣敢飞

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值