当前位置: 首页 > news >正文

进空间的网站吗网站建设去哪

进空间的网站吗,网站建设去哪,app开发公司哪家比较好,一般商业app要多少钱一、项目创建 创建NDK项目有两种方式#xff0c;一种从新创建整个项目#xff0c;一个在创建好的项目添加NDK接口。 1.创建NDK项目 创建 一个Native C项目#xff1a; 选择包名、API版本与算法交互的语言#xff1a; 选择C版本#xff1a; 创建完之后#xff0c;可…一、项目创建 创建NDK项目有两种方式一种从新创建整个项目一个在创建好的项目添加NDK接口。 1.创建NDK项目 创建 一个Native C项目 选择包名、API版本与算法交互的语言 选择C版本 创建完之后可以在项目中看到一个jni或者cpp的目录目录包含一个CMakeLists.txt文件一个xxx.cpp文件 2.添加NDK项目 在main目录添加一个目录可命名为cpp或者jni都行 把创建好的目录转化为JNI交互目录 转化成功之后目录下包含一个CMakeLists.txt文件一个xxx.cpp文件 3.添加NDK依赖 选择使用的NDK版本 选择CMake版本 把下载好的NDK添加到配置文件 4.测试与使用 添加类Java交互类 在java交互类里面接口与jni交互的API: package com.example.docscan; public class scanlib {public native String stringFromJNI();// Used to load the docscan library on application startup.static {System.loadLibrary(docscan);}}在xxx.cpp里面实现函数功能 extern C JNIEXPORT jstring JNICALL Java_com_example_docscan_scanlib_stringFromJNI(JNIEnv* env,jobject /* this */) {std::string hello Hello from C;return env-NewStringUTF(hello.c_str()); }在MainActivity类里面调用函数 public class MainActivity extends AppCompatActivity {private ScanLib scan_lib new ScanLib();private ActivityMainBinding binding;Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);binding ActivityMainBinding.inflate(getLayoutInflater());setContentView(binding.getRoot());// Example of a call to a native methodTextView tv binding.sampleText;tv.setText(scan_lib.stringFromJNI());} }二、添加依赖库 1.OpenCV OpenCV是图像处理的基础完整的包有上百M的大小基于apk包大小的考虑要对OpenCV做剪枝之后重新编译成SDK复制到jnicpp目录下 2.NCNN NCNN是深度学习算法模型的推理加速库可以基于CPU或NPU进行推理,对应市场常用机型选择使用NCNN版本并添加jni(cpp)目录下 3.算法代码 把算法实现代码添加jni(cpp)目录下 3. 源码编译 在CMakeLists.txt文件中添加这两个库与算法代码 project(ScanJiaLib) cmake_minimum_required(VERSION 3.4.1) set(CMAKE_CXX_FLAGS ${CMAKE_CXX_FLAGS} -fopenmp) set(CMAKE_C_FLAGS ${CMAKE_C_FLAGS} -fopenmp)if(DEFINED ANDROID_NDK_MAJOR AND ${ANDROID_NDK_MAJOR} GREATER 20)set(CMAKE_SHARED_LINKER_FLAGS ${CMAKE_SHARED_LINKER_FLAGS} -static-openmp) endif()## opencv 库 set(OpenCV_DIR ${CMAKE_SOURCE_DIR}/sdk/native/jni) find_package(OpenCV REQUIRED)if (OpenCV_FOUND)message(STATUS OpenCV_LIBS: ${OpenCV_LIBS})message(STATUS OpenCV_INCLUDE_DIRS: ${OpenCV_INCLUDE_DIRS}) else ()message(FATAL_ERROR opencv Not Found!) endif (OpenCV_FOUND)#ncnn库 set(ncnn_DIR ${CMAKE_SOURCE_DIR}/ncnn-20221128-android-vulkan/${ANDROID_ABI}/lib/cmake/ncnn) find_package(ncnn REQUIRED) set_target_properties(ncnn PROPERTIESINTERFACE_COMPILE_OPTIONS -frtti;-fexceptions# ncnn.cmake 里面是关的把它重新打开防止跟opencv2冲突如果是重新编译ncnn的请自己尝试要开还是关 )#算法代码 add_library(ScanJia-jni SHARED ScanJia_jni.cpp BitmapUtils.cpp DocumentEdge.cpp)target_link_libraries(ScanJia-jni ${OnnxRuntime_LIBS} ncnn ${OpenCV_LIBS} jnigraphics)4.封装成so包 在CMakeLists.txt里面添加封装库保存目录和要封装的cpp文件重新编译 set(CMAKE_LIBRARY_OUTPUT_DIRECTORY ${PROJECT_SOURCE_DIR}/libs/${ANDROID_ABI}) add_library(DocScan SHARED BitmapUtils.cpp DocumentEdge.cpp ScanJia_jni.cpp)编译完成之后,在jnicpp目录生成封装好的so包生成完成之后注释掉上面的语句 5.调用so包 在CMakeLists.txt里面添加so库目录 add_library(DocScan SHARED) set_target_properties(DocScanPROPERTIES IMPORTED_LOCATION${PROJECT_SOURCE_DIR}/libs/${ANDROID_ABI}/libDocScan.so)在java交互类里面添加so包名 static{System.loadLibrary(DocScan);}在build.gradle里面添加要调用的库 ndk {moduleName DocScanabiFilters armeabi-v7a, arm64-v8a}三、 API文档 1.Java交互类 在交互Java交互类ScanJiaSim.java中添加调用接口 //初始化算法类boolean useGPU——是否启用gpu加速public native boolean init(AssetManager mgr,boolean useGPU);//通用文档边缘检测Bitmap bitmap——传入图像返回PointI是检测到的四个点public native PointI edgeDetector(Bitmap bitmap);//书本边缘检测Bitmap bitmap——传入图像返回PointI是检测到的四个点public native PointI bookEdgeDetect(Bitmap bitmap);//边缘校正Bitmap bitmap——传入图像返回校正后的图像如果校正的点没有手动更新则使用边缘检测到的点进行校正public native Bitmap reveseEdge(Bitmap bitmap);//接收手动更新过的边缘点如果手动更新过边缘点则调用这个函数把更新的点发回校正函数使用public native int sendPoint(int x1,int y1,int x2,int y2,int x3,int y3,int x4,int y4);2.JNI文件 在jni文件ScanJia_jni.cpp中实现交互类定义的接口 extern C JNIEXPORT jboolean JNICALL Java_com_dashu_scanjia_ScanJiaSim_init(JNIEnv* env, jobject thiz, jobject assetManager,jboolean cpu_gpu);extern C JNIEXPORT jobject JNICALL Java_com_dashu_scanjia_ScanJiaSim_edgeDetector(JNIEnv *env,jobject thiz, jobject b_image);extern C JNIEXPORT jobject JNICALLJava_com_dashu_scanjia_ScanJiaSim_bookEdgeDetect(JNIEnv *env,jobject thiz, jobject b_image);extern C JNIEXPORT jobject JNICALL Java_com_dashu_scanjia_ScanJiaSim_reveseEdge(JNIEnv *env,jobject, jobject image);extern C JNIEXPORT int JNICALL Java_com_dashu_scanjia_ScanJiaSim_sendPoint(JNIEnv *env, jobject instance,int x1,int y1,int x2,int y2,int x3,int y3,int x4,int y4)3.算法代码实现 在cpp算法代码中实现接口 /// 读取模型/// \param mgr /// \param edge_model_parma -边缘模型路径/// \param edge_model_bin -边缘模型路径/// \param mid_model_parma - 书本中线模型路径/// \param mid_model_bin - 书本中线模型路径/// \param use_gpu -是否启用GPU推理/// \return int read_model(AAssetManager* mgr,std::string edge_model_parma ED210113FP16.param,std::string edge_model_bin ED210113FP16.bin,std::string mid_model_parma M20210325F.param,std::string mid_model_bin M20210325F.bin,bool use_gpu true);/// 边缘检测/// \param cv_src -原图像/// \param points_out -检测到的点集/// \param is_book -是否是书本/// \return int detect(cv::Mat cv_src, std::vectorcv::Point points_out, bool is_book);/// 图像校正/// \param cv_src -原图像/// \param cv_dst -结果图像/// \param in_points -校正点集/// \return int revise_image(cv::Mat cv_src, cv::Mat cv_dst, std::vectorcv::Point in_points);4.调用接口 在MainActivity.java类中调用接口 //实例化接口类 private ScanJiaSim scan_jia_sim new ScanJiaSim();//初始化类根据匹配的机型选择是否启用GPU启用状态只是参考最终是否能启用是基于底层是否能检测到GPU boolean ret_init scan_jia_sim.init(getAssets(),use_gpu);//调用边缘检测 ScanJiaSim.PointI point scan_jia_sim.edgeDetector(b_image);//调用书本边缘检测 ScanJiaSim.PointI point scan_jia_sim.bookEdgeDetect(b_image);//图像校正如果手动更新过边缘点则要先调用upPoint()函数 Bitmap bitmap scan_jia_sim.reveseEdge(b_image);//手动更新过边缘点则在校正之前把边缘点传入 private void upPoint(Point p1, Point p2, Point p3, Point p4) throws IOException四、实现效果
http://www.hkea.cn/news/14423447/

相关文章:

  • 怎么把网站放到百度重庆公司注销流程
  • 做外贸网站一般多少钱制作简历的免费模板网站
  • 商城网站建设实训报告模板wap手机网站开发
  • 好的制造公司站制作搜索引擎优化是指什么
  • html网站的规划与建设6如何在国外网站做翻译兼职
  • 期货直播室网站建设wordpress 删除修订版本
  • 百色网站建设公司郑州网络推广哪家口碑好
  • 网站建设开发哪家好专业门户网站开发公司
  • 政务网站建设工作总结网站建设费用怎么入账
  • 中国建设网站下载安装网站可信认证
  • 企业网站建站模板营销型网站建设的意义
  • 丹灶网站设计熟悉网页设计人机交互实验报告
  • 做网站推广的个人建网站需要什么手续
  • 诸城易讯网站建设服务中心企业公司名字大全
  • 网站首页布局汽车租赁网站怎么做
  • 网站模块数据同步中国万网商城
  • 网站是否需要备案做网站服务器 自己电脑还是租
  • 合川网站建设公司百度账号登录
  • 垂直行业门户网站有哪些网站内链怎么坐锚文本
  • 小语种网站开发建站公司网站模板论坛
  • 投票网站源码php更知鸟wordpress
  • 如何做好一个购物网站软件开发的收官之战是什么
  • 招聘网站建设公司营销型网站的建设与推广辅导记录
  • 网站 服务 套餐如何设置wordpress不自动更新
  • wordpress开启全站ssl网站开发实践意义
  • 网站开发岗位就业分析公众号开放平台
  • 网站与系统开发什么样的人适合做策划
  • 阿里做网站怎么做上海专业高端网站建
  • 有没有免费推广的appseo整站优化外包
  • 合格的网站设计师需要会什么软件申请摇号广州网站