【发布时间】:2022-08-10 03:19:13
【问题描述】:
我试图在图像上使用detectron2 中的预训练mask_rcnn_R_50_FPN_3x 模型。我收到错误ssl.SSLCertVerificationError: [SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed: unable to get local issuer certificate (_ssl.c:1131)。
我正在使用适用于 Linux 的 Windows 子系统。以下代码会产生错误。
from detectron2.config import get_cfg
from detectron2 import model_zoo
from detectron2.engine import DefaultPredictor
cfg = get_cfg()
cfg.merge_from_file(model_zoo.get_config_file("COCO-InstanceSegmentation/mask_rcnn_R_50_FPN_3x.yaml"))
cfg.MODEL.ROI_HEADS.SCORE_THRESH_TEST = 0.5
cfg.MODEL.WEIGHTS = model_zoo.get_checkpoint_url("COCO-InstanceSegmentation/mask_rcnn_R_50_FPN_3x.yaml")
cfg.MODEL.DEVICE='cpu'
predictor = DefaultPredictor(cfg)
我试过更新certifi 包。
我试过了
sudo apt install ca-certificates
sudo update-ca-certificates --fresh
export SSL_CERT_DIR=/etc/ssl/certs
基于此处的答案之一:https://stackoverflow.com/questions/52805115/certificate-verify-failed-unable-to-get-local-issuer-certificate.\
我已经尝试下载 https://dl.fbaipublicfiles.com 的证书(通过在 Google Chrome 中单击挂锁符号 -> '连接安全' -> '证书有效' -> '详细信息' -> '复制到文件',并且然后对“证书路径”选项卡下的不同证书执行相同的操作)并将其内容复制到cacert.pem 文件中。
更新:
它似乎与urllib.request 模块有关(尽管我可能会误解一些事情)。我发现
from urllib import request
request.urlretrieve('https://dl.fbaipublicfiles.com')
(urlretrive 函数由 detectron2 调用)导致相同的错误,而
import requests
requests.get('https://dl.fbaipublicfiles.com')
工作正常。
【问题讨论】:
-
这个网站的证书很好。确保通信路径中没有 SSL 拦截组件,例如公司代理,或者在 WSL 的情况下,Windows 系统上的 SSL 拦截防病毒软件。
-
感谢你的回复。你有没有机会就如何检查这个问题提供一些指导?
-
尝试从 WSL 内部使用
openssl s_client -connect dl.fbaipublicfiles.com:443 | openssl x509 -text -noout并查看它作为证书颁发者报告的内容。应该是“CN = DigiCert SHA2 High Assurance Server CA”。 -
你可以运行
python -c 'import certifi; print(certifi.where())'并发布结果吗? -
当然,它会打印:
/home/<username>/detectron2/detectronenv/lib/python3.8/site-packages/certifi/cacert.pem。
标签: python ssl ssl-certificate windows-subsystem-for-linux detectron