本帖最后由 cll826 于 2018-8-5 16:06 编辑
HELLO 2018 快速开始
下面介绍如何在Android Studio开发环境下通过角蜂鸟SDK使用Mnist卷积神经网络,实现数字识别,本文的介绍示例是使用角蜂鸟摄像头,如果需要外部图像来源可参考示例工程实现
步骤1:准备环境
1.下载最新版HornedSungemSDK jar包
2.请确保满足一下开发环境要求
1)确保minSdkVersion在Android 3.1以上
2)确保设备支持OTG
3)Android Studio 2.0或以上版本
3.新建project工程
4.请确保在使用角蜂鸟相关功能及服务前,已阅读Android API,详见API文档
步骤2:添加SDK
- 将下载的软件包根据实际需求拷贝到您项目对应的文件夹里,例如:
该lib下包含了horned-sungemSDK及javacv所需要的jar和so库
注意:libs文件夹路径不能包含中文,否则会编译失败
2.请在build.gradle文件里,请将上述库放入正确路径下,如检索不到,可手动添加引用:
步骤3:添加权限
为了保证SDK正常运行,需要在AndroidManistest.xml文件下添加下列许可:
- <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>
- <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
- <uses-permission android:name="android.hardware.usb.host"/>
- <uses-permission android:name="android.hardware.usb.accessory"/>
- <uses-feature android:name="android.hardware.usb.host"/>
复制代码 步骤4:代码实现
下面通过一个简单hello2018的例子讲解具体怎么使用角蜂鸟SDK
- 定义HelloActivity继承HsBaseActivity,用于角蜂鸟通信和显示结果,具体代码如下:
- public class HelloActivity extends HsBaseActivity {
- private TextView mTextView;
- private Handler mHandler = new Handler() {
- @Override
- public void handleMessage(Message msg) {
- super.handleMessage(msg);
- mTextView.append("\r\n" + msg.what);
- }
- };
- @Override
- protected void onCreate(Bundle savedInstanceState) {
- super.onCreate(savedInstanceState);
- setContentView(R.layout.activity_hello);
- mTextView = findViewById(R.id.tv_hello);
- }
- @Override
- public void openSucceed(ConnectBridge connectBridge) {
- new Hello2018Thread(this, connectBridge, mHandler).start();
- }
- @Override
- protected void onDestroy() {
- super.onDestroy();
- }
- @Override
- public void openFailed() {
- }
- @Override
- public void disConnected() {
- }
- }
复制代码- Hello2018Thread继承HsThread,处理业务逻辑,核心代码如下:
- @Override
- public void run() {
- super.run();
- int status = allocateGraphByAssets("graph_mnist");
- if (status != ConnectStatus.HS_OK) {
- return;
- }
- for (int i = 1; i < 5; i++) {
- int[] ints = new int[28 * 28];
- try {
- InputStream inputStream = mActivity.getAssets().open("hello/" + i + ".jpg");
- Bitmap bitmap = BitmapFactory.decodeStream(inputStream);
- bitmap.getPixels(ints, 0, 28, 0, 0, 28, 28);
- } catch (FileNotFoundException e) {
- e.printStackTrace();
- } catch (IOException e) {
- e.printStackTrace();
- }
- float[] float_tensor = new float[28 * 28];
- for (int j = 0; j < 28 * 28; j++) {
- float_tensor[j] = Color.red(ints[j]) * 0.007843f - 1;
- }
- int status_load = loadTensor(float_tensor, float_tensor.length, 0);
- if (status_load == HsConnectApi.HS_OK) {
- float[] result = getResult(0);
- if (result != null) {
- int max = getMaxPossible(result);
- mHandler.sendEmptyMessage(max);
- }
- }
- }
- }
- public int getMaxPossible(float[] arr) {
- int max = 0;
- float max_f = 0;
- for (int i = 0; i < arr.length; i++) {
- float temp = arr[i];
- if (temp > max_f) {
- max = i;
- max_f = temp;
- }
- }
- return max;
- }
复制代码 步骤5:具体操作流程
- 编译该程序,运行在Android设备上
- 进入程序主页
- 通过usb连接角蜂鸟
- 短暂等待,弹出权限提醒,
- 点击打开该设备,得到返回结果
- 结果如图:
注意:如果不打开设备,程序会执行openFailed()回调,想再次使用,请重新插拔角蜂鸟
产品购买链接 :https://www.cirmall.com/shop/?c=products&a=view&id=5113
|