yolov5安卓(鸿蒙)手机部署

本篇文章主要是针对yolov5s在安卓(鸿蒙)手机部署过程进行记录。

有关YOLOv5其他资料可以参考我以下文章进行学习:

C++版tensorrt YOLOv5推理

如何通过YAML文件修改YOLOv5网络

YOLOv5通道剪枝

YOLOv5图像分割代码详解1

YOLOv5图像分割之NMS

YOLOv5+霍夫变换之车道线检测

YOLOv5损失函数详解

YOLOV5+reid[支持跨视频识别]


以上内容可以帮助大家更好的学习yolov5。

好了,废话不多说,开始今天的正题。

先说一下我的开发环境:

windows 10

pytorch 1.7

Android Studio 4.1.3

Android Pytorch library 1.7.0
yolov5  6.0版本

我的手机:华为mate 40(鸿蒙3.0.0.205)

安卓手机也是可以的。

需要注意Android torch版本需要与你pytorch版本对应

下载6.0代码:

 git clone --branch v6.0 https://github.com/ultralytics/yolov5

 打开yolov5项目代码,修改export.py文件,修改内容如下:

@try_export
def export_torchscript(model, im, file, optimize, prefix=colorstr('TorchScript:')):
    # YOLOv5 TorchScript model export
    LOGGER.info(f'\n{prefix} starting export with torch {torch.__version__}...')
    f = file.with_suffix('.torchscript')
    fl = file.with_suffix('.torchscript.pt')  # 修改1
    ts = torch.jit.trace(model, im, strict=False)
    d = {"shape": im.shape, "stride": int(max(model.stride)), "names": model.names}
    extra_files = {'config.txt': json.dumps(d)}  # torch._C.ExtraFilesMap()
    if optimize:  # https://pytorch.org/tutorials/recipes/mobile_interpreter.html
        optimize_for_mobile(ts)._save_for_lite_interpreter(str(f), _extra_files=extra_files)
    else:
        ts.save(str(f), _extra_files=extra_files)
    (optimize_for_mobile(ts) if optimize else ts)._save_for_lite_interpreter(str(fl)) # 修改2
    return f, None

在终端输入以下命令:

python export.py --weights yolov5s.pt --optimize --device cpu --include torchscript

此时会在你项目路径下生成yolov5s.torchscript.pt文件(在optimize下仅支持cpu,如果用gpu会报错).


下载pytorch官方android demo代码。

git clone https://github.com/pytorch/android-demo-app.git

现在这个代码官网github更新的为pytorch1.10的。

下载后用Android Studio打开android-demo-app/ObjectDectection项目。

然后打开app/build.gradle文件,注意修改这个地方(我的是pytorch1.7):

implementation 'org.pytorch:pytorch_android:1.7.0'
implementation 'org.pytorch:pytorch_android_torchvision:1.7.0'

如果你的pytorch是1.10的,那么是下面的:

implementation 'org.pytorch:pytorch_android_lite:1.10.0'
implementation 'org.pytorch:pytorch_android_torchvision_lite:1.10.0'

 所以一定要注意自己的版本。

如果是你自己的权重,需要修改src/main/java/org/pytorch/demo/objectdetection/MainActivity.java文件,修改以下内容为自己的类和类txt文件。

try {
            mModule = PyTorchAndroid.loadModuleFromAsset(getAssets(), "yolov5s.torchscript.pt");
            BufferedReader br = new BufferedReader(new InputStreamReader(getAssets().open("classes.txt")));

然后是将前面说到的yolov5s.torchscript.pt文件放在ObjectDetection/app/src/main/assets/下即可.

此时assets内容如下:

ObjectDetection/app/src/main/assets/
|-- classes.txt
|-- test1.png
|-- test2.jpg
|-- test3.png
`-- yolov5s.torchscript.pt

以上工作准备完毕,下载android虚拟机。

在你Android Studio界面的右上角,有一个下图的标值按钮(AVD Manager)。

 点击创建虚拟机,然后选择以下选项。我这里选的是Nexus 5X,我试过Nexus 6,但生成的APP在虚拟机和我手机端总是闪退,不知道原因。

yolov5安卓(鸿蒙)手机部署_第1张图片

 点击next以后,选择x86 images,找到下面的选项。点击前面的Download(由于我已经下载过了,所以前面显示的是R)

yolov5安卓(鸿蒙)手机部署_第2张图片

等待下载成功后,界面如下(我下载的时候网络不行,所以用的科学上网工具,即便你没有下载成功,也会显示以下内容,但你点运行的时候会提示你虚拟机起不来):

yolov5安卓(鸿蒙)手机部署_第3张图片 接下来就是Build,生成你的APK文件。

yolov5安卓(鸿蒙)手机部署_第4张图片 

 成功以后会在你的app/build/outputs/apk/debug下生成一个app-debug.apk.目录形式如下:

ObjectDetection/app/build/outputs/apk/
`-- debug
    |-- app-debug.apk
    `-- output-metadata.json

 此可你就可以点击运行来试试你的apk是否成功(会自动开启虚拟机)

app界面如下。

此时会有4个按钮。

Detect:检测

Test Image:测试图片,这个图片你可以在MainActivity.java文件修改,但前提是你要把你的测试图片放在assets中。

Select:是你可以从你相册中获取一张图片进行检测。

Live:是实时视频检测【不过我测了一下,会有卡顿,我觉得不是我手机的锅,因为我以前试过tensorflow lite部署的目标检测和关键点检测,速度都很快】

 

yolov5安卓(鸿蒙)手机部署_第5张图片

 

 


以上就是yolov5s移动端部署的全部过程了。

也可以直接下载我torch1.7对应的android demo代码。

GitHub - YINYIPENG-EN/pytorch1.7_yolov5s_android: Pytorch1.7 android environment deployment yolov5s

你可能感兴趣的:(harmonyos,android,华为,YOLO,目标检测)