因为个人毕业设计的需求需要进行图像的切割,这是一个难点所以进行依次测试的记录,是否可以达到试卷中的标记物的切割
pixellib库
首先了解pixellib库所能达到的效果,他的图像分割分为两类一个是语义分割和实例分割
- 语义分割:将图像中每个像素赋予一个类别标签,用不同的颜色来表示
- 实例分割:无需对每个像素进行标记,只需要找到感兴趣物体的边缘轮廓
安装库之前设置源为国内
进行python库的源修改,改成清华源
pip临时使用
pip install -i https://pypi.tuna.tsinghua.edu.cn/simple some-package
pip设为默认
升级 pip 到最新的版本 (>=10.0.0) 后进行配置:
pip install pip -U
pip config set global.index-url https://pypi.tuna.tsinghua.edu.cn/simple
提供了 Anaconda 仓库的镜像,Windows 用户无法直接创建名为 .condarc
的文件,可先执行以下命令生成该文件之后再修改:
conda config --set show_channel_urls yes
打开c盘中的用户文件夹下的.condarc文件,复制如下内容
channels: - defaults show_channel_urls: true channel_alias: https://mirrors.tuna.tsinghua.edu.cn/anaconda default_channels: - https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/main - https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/free - https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/r - https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/pro - https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/msys2 custom_channels: conda-forge: https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud msys2: https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud bioconda: https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud menpo: https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud pytorch: https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud simpleitk: https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud
修改后可以通过以下命令清除索引缓存,从而保证镜像站提供的索引
conda clean -i
测试是否成功,这个命令会创建一个conda的虚拟环境,其中myenv是虚拟环境的名字,可以创建多个虚拟环境这样就可以多个版本共存
conda create -n myenv numpy
conda的其他命令:
查看所有的虚拟环境
conda info --envs
创建虚拟环境其中python为3.8并且版本为3.8中最高的
conda create -n myenv python=3.8
删除myenv虚拟环境
conda remove -n myenv --all
进入虚拟环境
conda activate myenv
退出虚拟环境
conda deactivate myenv
安装需要的库
其中包含tensorflow、pillow、opencv-python、scikit-image、pixellib
tensorflow 是一个开源的、基于 Python 的机器学习框架,它由 Google 开发,并在图形分类、音频处理、推荐系统和自然语言处理等场景下有着丰富的应用,是目前最热门的机器学习框架。
pillow 是一个对 PIL 友好的分支,作者是 Alex Clark 和贡献者。而 PIL 是一个 Python 图像处理库
opencv-python是一个强大的图像处理和计算机视觉库,实现了很多实用算法,值得学习和深究下。
scikit-image是基于scipy的一款图像处理包,它将图片作为numpy数组进行处理,正好与matlab一样,因此,我们最终选择scikit-image进行数字图像处理。
pixellib是一个库执行图像分割。它支持两种主要类型的图像分割:语义分割和实例分割,只需几行代码就可以实现语义分段和实例分段。这也是我们这次测试的重点。
使用conda install 库名 进行安装
使用conda list 库名 检查是否已经安装
使用conda update 库名 更新库
进行安装tensorflow第三方包时报错
Collecting package metadata (current_repodata.json): done
Solving environment: failed with initial frozen solve. Retrying with flexible solve.
Solving environment: failed with repodata from current_repodata.json, will retry with next repodata source.
尝试更新conda的所有库
conda update --all
没有效果
然后进行设置修改链接为灵活的方式,再次进行第三方包的安装操作
conda config --add channels conda-forge
conda config --set channel_priority flexible
没有效果
看到有人说要加prefix命令对prefix进行更新
conda update --prefix E:\SoftwareInstallation\Anaconda3 anaconda
更新完成之后再次更新conda的所有库
conda update --all
测试还是不行,可能是国内镜像清华中的Anaconda不包含第三方源
最终我们采用pip的方式安装,我们采用上面介绍的使用设置pip的镜像之后
pip install tensorflow
pip install opencv-python
pip install pixellib
边安装边使用conda list进行检测
使用xception模型(语义分割)代码测试
import pixellib
from pixellib.semantic import semantic_segmentation
segment_image = semantic_segmentation()
segment_image.load_pascalvoc_model("deeplabv3_xception_tf_dim_ordering_tf_kernels.h5")
segment_image.segmentAsPascalvoc("123.png", output_image_name = "new.png")
使用Mask RCNN模型(实例分割)代码测试
import pixellib
from pixellib.instance import instance_segmentation
segment_image = instance_segmentation()
segment_image.load_model("mask_rcnn_coco.h5")
segment_image.segmentImage("123.png", output_image_name = "new1.png")
在上面的代码中,我们加载了在load_pascalvoc_model上训练的用于分割对象的xception 模型
xception模型(语义分割)下载地址:
https://github.com/bonlime/keras-deeplab-v3-plus/releases/download/1.1/deeplabv3_xception_tf_dim_ordering_tf_kernels.h5Mask RCNN模型(实例分割)下载地址:
https://github.com/matterport/Mask_RCNN/releases/download/v2.0/mask_rcnn_coco.h5其中需要注意我们使用VsCode开发,其中图片和训练的模型需要放在最外层的工作区内,不能放在运行文件夹内
-
path_to_image:图像被分割的路径。
-
path_to_output_image:保存输出图像的路径,图像将被保存在你当前的工作目录中。
研究发现该模型是在pascal voc数据集上训练的xception模型,这个数据集有20个对象类别,自行车、小鸟、小船、瓶子、公共汽车、汽车、猫、椅子、奶牛、餐桌、狗、马、摩托车、个人、盆栽植物、羊、沙发、火车、电视监视器。
使用以下的图片进行测试代码
xception模型(语义分割)运行结果
Mask RCNN模型(实例分割)运行结果
发现这个训练的模型无法满足我现在试卷分析的要求,这些的训练模型是对基于20种数据集的 ,
继续研究一些图切割