tensorflow在android平台的使用(二)

通过android studio打开在官方给你的demo里的TensorflowImageClassifier
// Find the best classifications.
    PriorityQueue<Recognition> pq =
        new PriorityQueue<Recognition>(
            3,
            new Comparator<Recognition>() {
              @Override
              public int compare(Recognition lhs, Recognition rhs) {
                // Intentionally reversed to put high confidence at the head of the queue.
                return Float.compare(rhs.getConfidence(), lhs.getConfidence());
              }
            });
    for (int i = 0; i < outputs.length; ++i) {
      if (outputs[i] > THRESHOLD) {
        pq.add(
            new Recognition(
                "" + i, labels.size() > i ? labels.get(i) : "unknown", outputs[i], null));
      }
    }
    final ArrayList<Recognition> recognitions = new ArrayList<Recognition>();
    int recognitionsSize = Math.min(pq.size(), MAX_RESULTS);
    //for (int i = 0; i < recognitionsSize; ++i) {//我将输出每一个值改为只输出最接近的一个值
    for (int i = 0; i < 1; ++i) {  //out the most precise picture
      recognitions.add(pq.poll());
    }
    Trace.endSection(); // "recognizeImage"
    return recognitions;
  }
然后在ClassifierActivity中将读取模型改为以下
private static final int NUM_CLASSES = 9;
  private static final int INPUT_SIZE = 299;
  private static final int IMAGE_MEAN = 128;
  private static final float IMAGE_STD = 128;
  private static final String INPUT_NAME = "Mul";
  private static final String OUTPUT_NAME = "final_result";


  private static final String MODEL_FILE = "file:///android_asset/optimized_graph.pb";
  private static final String LABEL_FILE =
      "file:///android_asset/output_labels.txt";
最后通过蓝牙串送出来
public void run() {
            final long startTime = SystemClock.uptimeMillis();
            final List<Classifier.Recognition> results = classifier.recognizeImage(croppedBitmap);

            //lastProcessingTimeMs = SystemClock.uptimeMillis() - startTime;
            //LOGGER.i("Detect: %s", results);
            cropCopyBitmap = Bitmap.createBitmap(croppedBitmap);
            if (resultsView == null) {
              resultsView = (ResultsView) findViewById(R.id.results);
            }
            resultsView.setResults(results);
            mtmp = "" + results;
            //mtext = mtmp;
            arr = mtmp.toCharArray();
            if( arr[3] == ']' )
            {
              mtext = "" + arr[2];
            }
            else if( arr[3] == '0' )
            {
              mtext = "a";
            }
            else if( arr[3] == '1' )
            {
              mtext = "b";
            }


            requestRender();
            readyForNextImage();

            selectDevice=mBluetoothAdapter.getRemoteDevice("80:CA:9E:A1:84:47");
            try {
              // 判断客户端接口是否为空
              if (clientSocket == null) {
                // 获取到客户端接口
                clientSocket = selectDevice.createRfcommSocketToServiceRecord(MY_UUID);
                // 向服务端发送连接
                clientSocket.connect();
                // 获取到输出流,向外写数据
                os = clientSocket.getOutputStream();
              }
              // 判断是否拿到输出流
              if (os != null) {
                // 需要发送的信息
                //String text ="1";
                // 以utf-8的格式发送出去
                os.write(mtext.getBytes("UTF-8"));
              }
              // 吐司一下,告诉用户发送成功
              //Toast.makeText(getApplicationContext(), "发送信息成功,请查收", Toast.LENGTH_SHORT).show();
            } catch (IOException e) {
              e.printStackTrace();
              // 如果发生异常则告诉用户发送失败
              Toast.makeText(getApplicationContext(), "发送信息失败", Toast.LENGTH_SHORT).show();
            }
          }

先将之前优化的optimized_graph.pb和output_labels.txt放入/opt/tensorflow/tensorflow/examples/android/assets文件夹下

之后在tensorflow文件夹(源代码解压出的文件夹)打开终端输入

bazel build -c opt //tensorflow/examples/android:tensorflow_demo

最后/opt/tensorflow/bazel-bin/tensorflow/examples/android文件夹下的apk文件取出放到手机上即可

猜你喜欢

转载自blog.csdn.net/qq_35570735/article/details/79845189