概述

MNN 工作台是一款单机软件,为了能够完成手机端相关的配合使用,MNN 工作台提供了一套 EasyMNN SDK 的接入使用,这套 SDK 也是完全免费的。

iOS 接入流程

Cocoapods 安装

SDK iOS License
EasyMNN 0.1.2 (对应工作台 1.3.0)
1.3.6 (对应工作台 1.3.6)
《MNN Kit Terms of Service》
MNN 1.1.1-pre

target ‘MNNNWBDemo’ do

pod ‘EasyMNN’, ‘1.3.6’ # 工作台 1.3.6 使用 1.3.6 版本,如果是 1.3.0 使用 0.1.2 版本 pod ‘MNN’, ‘1.1.1-pre’

end

  1. <a name="rS456"></a>
  2. ### iOS SDK 使用
  3. <a name="bqOlT"></a>
  4. ### 1. 初始化SDK
  5. 可以在应用刚启动的时候调用初始化方法,
  6. ```objectivec
  7. #import <EasyMNN/EasyMNN.h>
  8. [EasyMNN init];

2. 注册页面打开/关闭方式

向SDK注册当前应用环境中打开/关闭页面的方式,在如Debug运行时中会使用到。如不注册,默认的方式为从根ViewController使用present的方式打开一个新的页面栈:

  1. // 默认注册的打开新页面方式
  2. UIWindow *window = [UIApplication sharedApplication].keyWindow;
  3. UIViewController *rootVC = window.rootViewController;
  4. UINavigationController *navi = [[UINavigationController alloc] initWithRootViewController:newVc];
  5. [rootVC presentViewController:navi animated:YES completion:NULL];
  6. // 默认注册的关闭新页面方式
  7. [newVc dismissViewControllerAnimated:YES completion:nil];

主动注册替换SDK默认的实现:

  1. [EasyMNN registerPageOpenBlock:^(UIViewController * vc) {
  2. dispatch_async(dispatch_get_main_queue(), ^{
  3. // 打开vc的实现
  4. });
  5. }];
  6. [EasyMNN registerPageCloseBlock:^(UIViewController * vc) {
  7. dispatch_async(dispatch_get_main_queue(), ^{
  8. // 关闭vc的实现
  9. });
  10. }];

3. 连接工作台

image.png
工作台应用中点击扫码连接,复制图中的地址,调用连接接口:

  1. [EasyMNN setWBServerAddress:@"ws://169.254.180.27:14110"];
  2. [EasyMNN startConnect];

image.png
连接成功后,二维码弹框会退出,页面右上角会显示手机的名字。

4. 注册环境变量

如果你集成的iOS应用中有一些资源,如图片、文本等,需要在Python环境中获取的,可以注册环境变量:

  1. [EasyMNN registerEnvVars:@{@"labelpath":[[NSBundle mainBundle] pathForResource:@"synset_words.txt" ofType:nil]}];

在Python中获取:

  1. kit = MNNCV.Kit()
  2. vars = kit.getEnvVars()
  3. workPath = vars["labelpath"]

5. 注册环境变量

如果你关心工作台连接中的一些事件,可以实现代理方法:

  1. /// 工作台连接代理协议
  2. @protocol EasyMNNWBDelegate <NSObject>
  3. @optional
  4. - (void)didConneced;
  5. - (void)didConnectFailWithError:(NSError *)error;
  6. - (void)didLostConnect;
  7. - (void)didReceivedLog:(NSString *)log level:(NSString *)level tag:(NSString *)tag;
  8. - (NSDictionary *)willRunFileWithRunInfo:(NSDictionary *)runInfo;
  9. @end

设置代理:

  1. [EasyMNN setWBDelegate:self];

Android 接入流程

依赖相关sdk

  1. api 'com.alibaba.android.workbench:easymnn:0.1.2' //13.5 MB

其中easymnn依赖下面四项(无需单独引入);

  1. api 'com.alibaba.android.mnnkit:core:0.1.2@aar'
  2. api ('com.alibaba:fastjson:1.2.9')
  3. api ('org.java-websocket:Java-WebSocket:1.5.1')

Android SDK 使用

初始化相关SDK

  1. //初始化sdk
  2. EasyMNN.init(context);

连接到工作台

  1. //打开工作台可以看到你工作台的连接地址,当然你也可以通过对接扫码sdk获取连接url信息;
  2. String url = "ws://30.10.xx.xx:14110";
  3. URI uri = URI.create(url);
  4. EasyMNN.connectToWorkBench(uri);

附:如何查看工作台连接地址

image.png
image.png

Demo 示例代码

  1. package com.alibaba.workbench.demo;
  2. import android.content.Context;
  3. import android.content.SharedPreferences;
  4. import android.os.Bundle;
  5. import android.text.TextUtils;
  6. import android.view.View;
  7. import android.widget.EditText;
  8. import android.widget.Toast;
  9. import androidx.appcompat.app.AppCompatActivity;
  10. import com.alibaba.workbench.WorkBench;
  11. import java.net.URI;
  12. public class MainActivity extends AppCompatActivity {
  13. @Override
  14. protected void onCreate(Bundle savedInstanceState) {
  15. super.onCreate(savedInstanceState);
  16. setContentView(R.layout.activity_main);
  17. Context context = MainActivity.this;
  18. final SharedPreferences sp = MainActivity.this.getPreferences(0);
  19. final EditText urlEt = findViewById(R.id.urlEt);
  20. String cacheUrl = sp.getString("url", null);
  21. if (!TextUtils.isEmpty(cacheUrl)) {
  22. urlEt.setText(cacheUrl);
  23. }
  24. //step 1、初始化sdk
  25. EasyMNN.init(context);
  26. findViewById(R.id.connect_to_server).setOnClickListener(new View.OnClickListener() {
  27. @Override
  28. public void onClick(View v) {
  29. String url = urlEt.getText().toString();
  30. if (TextUtils.isEmpty(url)) {
  31. Toast.makeText(MainActivity.this, "URL 为空", Toast.LENGTH_SHORT).show();
  32. } else {
  33. //step 2、连接工作台
  34. URI uri = URI.create(url);
  35. EasyMNN.connectToWorkBench(uri);
  36. sp.edit().putString("url", url).apply();
  37. }
  38. }
  39. });
  40. }
  41. }

完整 Playground App 使用

请阅读《2.4 EasyMNN Playground App 安装》