yolo AttributeError: 'FreeTypeFont' object has no attribute 'getsize'
时间: 2023-11-12 17:05:25 浏览: 284
在运行yolov5时,出现了错误信息:AttributeError: ‘FreeTypeFont’ object has no attribute ‘getsize’。这是因为安装了新版本的Pillow (10),pip install tf-models-official删除了该getsize功能,降级到Pillow 9.5可以解决该问题。
相关问题
yolo v9 AttributeError: 'FreeTypeFont' object has no attribute 'getsize'
### 错误原因分析
在YOLOv9运行过程中遇到`AttributeError: 'FreeTypeFont' object has no attribute 'getsize'`错误,通常是因为使用的Pillow库版本过高或者过低所引起的兼容性问题[^1]。具体来说,在某些特定版本的Python环境中,`FreeTypeFont.getsize()`方法已经被弃用并移除。
### 解决方案
#### 方法一:降级Pillow版本
可以通过降低Pillow版本来解决问题。建议尝试安装指定较低版本的Pillow:
```bash
pip uninstall pillow
pip install pillow==8.4.0
```
此操作可以确保程序调用了仍然支持`getsize()`函数的Pillow版本[^2]。
#### 方法二:修改源码适配新API
如果希望继续使用最新版的Pillow,则需调整代码以适应新的字体尺寸计算方式。对于新版Pillow而言,应该采用`font.getbbox(text)`替代原有的`font.getsize(text)`来进行文本大小测量[^3]。
例如,找到报错位置附近的代码片段,并做如下更改:
```python
# 原始写法 (旧版)
text_size = font.getsize(label)
# 修改后的写法 (适用于较新版本 Pillow)
left, top, right, bottom = font.getbbox(label)
text_size = (right - left, bottom - top)
```
通过上述任一种手段均能有效规避该异常情况的发生。
#### 方法三:检查其他依赖项
有时此类问题也可能与其他第三方包有关联,特别是当项目涉及图像处理或可视化功能时。确认所有必要的软件包均已正确安装且相互之间不存在冲突非常重要。例如,按照官方指南完成FiftyOne等相关工具链的部署可能有助于排除潜在干扰因素[^4]。
YOLO验证报错AttributeError: 'dict' object has no attribute 'project'
### 解决YOLO验证时出现的`AttributeError`
当遇到 `AttributeError: 'dict' object has no attribute 'shape'` 或者 `'list' object has no attribute 'shape'` 错误时,这通常意味着代码试图访问字典或列表对象不存在的方法或属性。对于YOLO框架中的这种情况,可能的原因在于数据处理阶段的数据结构不匹配。
#### 数据预处理检查
确保输入到模型的数据格式正确无误。在检测任务中,图像应当被转化为张量形式并具有特定形状(通常是 `[batch_size, channels, height, width]`)。如果输入是一个字典或者列表而不是预期的张量,则会触发上述异常[^1]。
```python
import torch
from torchvision import transforms
transform = transforms.Compose([
transforms.ToTensor(),
])
image_tensor = transform(image) # 将PIL Image或其他类型的图片转成tensor
input_batch = image_tensor.unsqueeze(0) # 添加批次维度
```
#### 修改Detect脚本逻辑
针对 `detect.py` 文件内的具体实现细节,可以考虑调整如下:
- 验证传入模型前后的变量类型;
- 如果是从其他源获取的数据集,请确认其加载方式不会改变原本期望得到的对象形态;
- 对于自定义配置项如项目路径(project),应通过适当的方式传递给相关组件而非作为属性直接附加至字典上[^2]。
```python
if isinstance(data, dict):
project_path = data.get('project') # 安全地从字典取值而不引发错误
else:
raise TypeError(f"Expected a dictionary but got {type(data)}")
```
#### TRT-Python推理环境设置注意事项
根据已有的实践案例,在构建 TensorRT 推理环境中需要注意一些特殊事项来规避潜在问题。特别是当涉及到不同版本间的兼容性以及特定参数的选择时更需谨慎对待。例如,在转换 ONNX 模型时不建议使用 end2end 参数以防止不必要的复杂度引入[^3]。
#### 使用torch.hub加载模型时的参数校验
最后,利用 PyTorch 的 hub 功能下载预训练模型时也要留意所提供的参数是否合适。某些情况下,默认选项未必适用于所有场景;因此,了解各个可选参数的意义及其影响范围是非常重要的[^4]。
```python
model = torch.hub.load(
repo_or_dir='ultralytics/yolov5',
model='custom',
path=path,
source='local', # 明确指定本地资源还是远程仓库
force_reload=True, # 是否强制重新加载缓存副本
verbose=False # 控制日志输出级别
)
```
阅读全文
相关推荐


















