参考博客:原博客

由于windows下是不能直接使用conda install 或者pip install pycocotools,唉,不像linux系统,直接使用这两个命令即可安装,简单粗暴。由于我之前一直使用的组里的服务器,用的是linux,所以可以直接安装,当时就没接触windows下安装pycocotools与linux是如此的的不同。所以我找了好多博客,发现有用的少之又少,只有这一个博主写的可以解决我的问题,所以针对该解决方法,自己是如何在本地下安装pycocotools做一个简要的说明。

1. 下载pycocotools的源码

源码的地址为:pycocotools的源码
下载zip到本地,随便放到哪里,解压之后,将PythonAPi文件夹下面的pycocotools文件夹和pycocotools.egg-info文件夹复制到你的conda创建的环境下中,具体如下图:
在这里插入图片描述
然后复制到你的anaconda -> envs -> torch(我这里创建的环境是torch) -> Lib -> site-packages
在这里插入图片描述

2. 安装python对应的VC++

这里的坑也挺大的,如果你直接使用某些博客中的下载地址去下载VC++,如下图:
在这里插入图片描述
使用该软件直接安装,会一直报错:
在这里插入图片描述
就NM离谱。。。。

所以我继续寻找,终于发现知乎上有一个博主解释的非常好,原文链接:解决VC++14.0安装问题
我的建议:直接去官网下对应python版本的VC++,不要下载那些某博主提供的软件安装。
选择对应的VC++版本之后,进行安装,推荐使用默认安装,直接安装到C盘,不需要修改路径,大概是3.9个G左右。

3. 进行pycocotools的编译

打开本地的Anaconda Powershell Prompt命令台,进入到你刚才下载好的的PythonAPI文件夹下面,使用命令:python setup.py build_ext --inplace进行编译,如下图:
在这里插入图片描述
在这里插入图片描述
这里我其实出现了一个问题,因为当时下载pycocotools源码的时候,PythonAPI下面是没有pycocotools.egg-info文件夹的,所以直接进行编译的话,然后在导入包的时候还是会报错:

from pycocotools.coco import COCO

这里,依旧会报错:ModuleNotFoundError: No module named ‘pycocotools._mask’
出问题的原因在于没有将pycocotools.egg-info文件夹复制到对应的环境名下面的site-packages下面,但是源码中又没有这个文件。。。。。。无语。。。。

我的解决方法是:等待VC++14.0安装好之后进行
python setup.py build_ext --inplace先进行编译,然后会发现此时的PythonAPI文件夹下面出现了pycocotools.egg-info文件,然后将该文件在复制到你所创建的环境下的site-packages文件下,重新再使用命令:
python setup.py build_ext --inplace
python setup.py build_ext install
就可以成功的进行pycocotools的编译和安装pycocotools包。

4. 测试安装是否成功

在Anaconda Prompt命令台调出python控制台,再导入pycocotools看是否报错:

from pycocotools.coco import COCO

在这里插入图片描述
可以看到并没有报错,如果还是不放心,我们可以在Pycharm也去试试看,如下:


import os
from pycocotools.coco import COCO
from PIL import Image, ImageDraw
import matplotlib.pyplot as plt

json_path = "E:/Dataset/dataset/COCO数据集/coco/annotations/instances_val2017.json"
img_path = "E:/Dataset/dataset/COCO数据集/coco/val2017"

# load coco data
coco = COCO(annotation_file=json_path)

# get all image index info
ids = list(sorted(coco.imgs.keys()))
print("number of images: {}".format(len(ids)))

# get all coco class labels
coco_classes = dict([(v["id"], v["name"]) for k, v in coco.cats.items()])

# 遍历前三张图像
for img_id in ids[:3]:
    # 获取对应图像id的所有annotations idx信息
    ann_ids = coco.getAnnIds(imgIds=img_id)

    # 根据annotations idx信息获取所有标注信息
    targets = coco.loadAnns(ann_ids)

    # get image file name 获取图像的路径也就是该图像的文件名
    path = coco.loadImgs(img_id)[0]['file_name']

    # read image 读取图像
    img = Image.open(os.path.join(img_path, path)).convert('RGB')
    draw = ImageDraw.Draw(img)
    # draw box to image 由于COCO的box标注的格式:(x1,y1,w,h)即左上角的x和y坐标,以及box的宽高
    for target in targets:
        x, y, w, h = target["bbox"]                    # 获取GT box的(x1,y1,w,h)
        x1, y1, x2, y2 = x, y, int(x + w), int(y + h)  # 获取GT box的(x1,y1,x2,y2) 转换成左上角和右下角的坐标值
        draw.rectangle((x1, y1, x2, y2))
        draw.text((x1, y1), coco_classes[target["category_id"]])

    # show image
    plt.imshow(img)
    plt.show()

结果展示如下:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

到这里,可以完全放心了,那么windows下的pycocotools的安装搞定!!!

开始愉快地train代码之旅吧!神魔恋!

Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐