舌头模型bug问题:
1.vivo有个5.0的版本用不了。以前也用不勒
2.小米6.0.1,相机预览非常卡顿
3.ren mi手机相册选择有问题
4.分析页面提示不对,拍照已完成
1.把最新的demo移植到项目中,通过bitmap的形式,能否识别图片=====不行。ncn版本不对
2.在旧项目中改代码
C++ unsigned char *是表示无bai符号字符指针的意du思。
方案:
1.确定camera2输入bitmap的格式
2.opencv的功能
3.必须先看下之前的代码意思。理解才行
解决方案:
1.在nvnn新demo上。把加载跑通。确定发现是数据源问题。
发现:ncnn新demo上,可以用旧模型在GPU上运行。新模型必须用cpu才行。坐标不一样,一点差异
去掉openCV。然后java里面转成BGR,在ncnn里面加载。但是还是不对
不用openCV,和下面是一样的。构建一个对象而已
cv::Mat imgSrc(height, width, CV_8UC3, (unsigned char *) yuv);
猜测:旧版框架识别不了量化模型。新版框架解决不了编译的问题。
源代码分析《一》
1.在java里面,把rgb转灰度图片
public static byte[] rgb2YCbCr420(int[] pixels, int width, int height) {
2.创建8位无符号的单通道---灰度图片
然后把图片转为3通道得图片
cv::Mat imgSrc(height, width, CV_8UC1, (unsigned char *) yuv);//旧版本
cv::Mat imgDst = convertTo3Channels(imgSrc);
//【1】CV_8UC1---则可以创建----8位无符号的单通道---灰度图片------grayImg
#define CV_8UC1 CV_MAKETYPE(CV_8U,1)
#define CV_8UC2 CV_MAKETYPE(CV_8U,2)
//【2】CV_8UC3---则可以创建----8位无符号的三通道---RGB彩色图像---colorImg
#define CV_8UC3 CV_MAKETYPE(CV_8U,3)
//【3】CV_8UC4--则可以创建-----8位无符号的四通道---带透明色的RGB图像
#define CV_8UC4 CV_MAKETYPE(CV_8U,4)
1--灰度图片--grayImg---是--单通道图像
2--RGB彩色图像---------是--3通道图像
3--带Alph通道的RGB图像--是--4通道图像
Mat convertTo3Channels(const Mat &binImg)
{
Mat three_channel = Mat::zeros(binImg.rows, binImg.cols, CV_8UC3);
vector<Mat> channels;
for(int i = 0; i < 3; i++)
{
channels.push_back(binImg);
}
merge(channels, three_channel);
return three_channel;
}
3.BGR2GRAY
ncnn::Mat in = ncnn::Mat::from_pixels_resize(bgr.data, ncnn::Mat::PIXEL_BGR2GRAY, bgr.cols,
bgr.rows, 300, 300); //2.5M 320*180 1.5M 320*240
const float mean_vals[1] = {127.5};
in.substract_mean_normalize(mean_vals, 0);
从名字中可以看出:
ALPHA_8:数字为8,图形参数应该由一个字节来表示,应该是一种8位的位图
ARGB_4444:4+4+4+4=16,图形的参数应该由两个字节来表示,应该是一种16位的位图.
ARGB_8888:8+8+8+8=32,图形的参数应该由四个字节来表示,应该是一种32位的位图.
RGB_565:5+6+5=16,图形的参数应该由两个字节来表示,应该是一种16位的位图.
网上讲,ALPHA_8,ARGB_4444,ARGB_8888都是透明的位图,也就是所字母A代表透明.
ARGB_4444:意味着有四个参数,即A,R,G,B,每一个参数由4bit表示.
同理:
ARGB_8888:意味着有四个参数,即A,R,G,B,每一个参数由8bit来表示.
同理:
RGB_565:意味着有三个参数,R,G,B,三个参数分别占5bit,6bit,5bit.
我想一定该存在其他格式的BMP文件,但每个参数的值之和必须是8的整数倍,应该是这个规律.
图像通道:
Mat::Mat(int _rows, int _cols, int _type, void* _data, size_t _step)
1.so库里面可以包含so库吗?字节跳动
2.多个so库重复,相同的so库问题。
https://www.cnblogs.com/hbolin/p/11506379.html
参数不同会奔溃的地方:
ncnn::Mat in = ncnn::Mat::from_pixels_resize(bgr.data, ncnn::Mat::PIXEL_BGR, bgr.cols,
bgr.rows, 300, 300); //2.5M 320*180 1.5M 320*240
opencv之理解创建图片类型 及CV_8UC1,CV_8UC2等参数详解
- CV_8UC1 – 单通道8 bit无符号整数
- CV_8UC3 – 3通道8 bit为无符号整数
http://www.itkeyword.com/doc/5790943917518158x331/opencv
opencv
https://www.thinbug.com/q/44601593
cv::Mat imgSrc(height, width, CV_8UC3, (unsigned char *)yuv);
cv::Mat imgDst;
cv::cvtColor(imgSrc, imgDst, CV_RGB2BGR);
或者直接这个
cv::Mat imgSrc(height, width, CV_8UC3, (unsigned char *)yuv);
阀值控制:
#define thres_val 0.7//0.9
2020-07-02 20:10:05.471 24711-24711/? E/AndroidRuntime: FATAL EXCEPTION: main
Process: com.yuedong.sport, PID: 24711
java.lang.IllegalArgumentException: appid不能为空
at com.bytedance.sdk.openadsdk.utils.z.b(SourceFile:42)
at com.bytedance.sdk.openadsdk.utils.z.a(SourceFile:20)
at com.bytedance.sdk.openadsdk.core.h.e(SourceFile:378)
at com.bytedance.sdk.openadsdk.core.h.o(SourceFile:373)
at com.bytedance.sdk.openadsdk.core.v.createAdNative(SourceFile:109)
at com.yuedong.sport.main.task.RewardVideoManager.(SourceFile:35)
at com.yuedong.sport.main.task.RewardVideoADMgr$4.(SourceFile:190)
at com.yuedong.sport.main.task.RewardVideoADMgr.getTTVideoAdManager(SourceFile:190)
at com.yuedong.sport.main.task.RewardVideoADMgr.loadAd(SourceFile:170)
at com.yuedong.sport.main.task.RewardVideoADMgr.b(SourceFile:18)
at com.yuedong.sport.main.task.RewardVideoADMgr$3.onNetFinished(SourceFile:157)
at com.yuedong.common.net.YDNetWorkBase$HttpCallBack$5.run(SourceFile:569)
at android.os.Handler.handleCallback(Handler.java:790)
at android.os.Handler.dispatchMessage(Handler.java:99)
at android.os.Looper.loop(Looper.java:198)
at android.app.ActivityThread.main(ActivityThread.java:7069)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:523)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:841)
2020-07-02 20:10:05.512 24711-26526/? E/CursorWindow: Could not allocate CursorWindow '/data/user/0/com.yuedong.sport/databases/downloader.db' of size 2097152 due to error -12.
2020-07-02 20:10:05.530 24711-26516/? E/zygote: Not gen hprof when OOME
2020-07-02 20:10:05.530 24711-26516/? E/AndroidRuntime: FATAL EXCEPTION: bd_tracker_w
Process: com.yuedong.sport, PID: 24711
java.lang.OutOfMemoryError: pthread_create (1040KB stack) failed: Try again
at java.lang.Thread.nativeCreate(Native Method)
at java.lang.Thread.start(Thread.java:733)
at com.bytedance.embedapplog.a.e.handleMessage(SourceFile:131)
at android.os.Handler.dispatchMessage(Handler.java:102)
at android.os.Looper.loop(Looper.java:198)
at android.os.HandlerThread.run(HandlerThread.java:65)
=======================================================
1.把舌头的图片放在新的方式里面加载
2种方式都不不行
1.直接替换模型,不能加载压缩模型
2.新方式加载模型,耗时10s,不能商用
优化方案:暂时没有,模型加载框架ncnn。需要深入研究或者用换模型加载框darknet2ncnn
问题:
1.直接替换模型:ncnn加载模型-1
2.在旧版本,升级ncnn
3.新方式:模型加载太慢。
2020-06-29 13:46:13.437 10574-10574/com.tencent.mobilenetssdncnn D/MobilenetSSDNcnn: onCreate
2020-06-29 13:46:13.439 10574-10574/com.tencent.mobilenetssdncnn D/MobilenetSSDNcnn: load_param success
2020-06-29 13:46:20.917 10574-10574/com.tencent.mobilenetssdncnn D/MobilenetSSDNcnn: load_model success
2020-06-29 13:46:20.917 10574-10574/com.tencent.mobilenetssdncnn D/MobilenetSSDNcnn: start
2020-06-29 13:46:20.917 10574-10574/com.tencent.mobilenetssdncnn D/MobilenetSSDNcnn: end
2020-06-29 13:46:20.917 10574-10574/com.tencent.mobilenetssdncnn D/MobilenetSSDNcnn: ret_init------
模型加载用了7s
android ios 预编译库 20190320 dbf2052:可以===比较正常的
android ios 预编译库 20200106 6f2ef19===可以编过
20180830 ef36d79==版本
旧版本:40ms
2020-06-30 18:30:20.193 20102-20151/com.jsmapp.jsm D/james: load_person_param :0
2020-06-30 18:30:20.236 20102-20151/com.jsmapp.jsm D/james: load_person_model:0
报这个错,说明libncnn.a文件报错了
发现:和ndk的版本还有关系,有很大关系
ndk.dir=/Users/mac/ndk/android-ndk-r16b
#ndk.dir=/Users/mac/ndk/android-ndk-r16b
ndk.dir=/Users/mac/Library/Android/sdk/ndk/16.1.4479499
ndk.dir=/Users/mac/Library/Android/sdk/ndk-bundle
中间生成的so库