% python3
Python 3.8.19 (default, Mar 20 2024, 15:27:52)
[Clang 14.0.6 ] :: Anaconda, Inc. on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>> import tensorflow as tf
>>>
>>> tf.__version__
'2.13.0'
>>> tf.config.list_physical_devices('GPU')
[PhysicalDevice(name='/physical_device:GPU:0', device_type='GPU')]
>>>
(tf) admin@gpu-server:/usr/local/cuda$ python
Python 3.9.16 (main, Mar 8 2023, 14:00:05)
[GCC 11.2.0] :: Anaconda, Inc. on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> import torch_geometric
Unexpected UTF-8 BOM (decode using utf-8-sig): line 1 column 1 (char 0)
Make sure /Users/kaflix_wanya/Desktop/current/카스캐닝 데이터셋/parts_labeling/0831_1996개_jpg+json/100210979526_576120.json is a valid label file.'
문제는 annotating, labeling 데이터를 저장하고 있는 json 파일을 불러오면서 발생한 에러인데요.
이 많은 json파일의 인코딩을 어떻게 바꿀까 고민하다가 파이썬 코드로 해결하였습니다.
데이터셋 경로를 불러와서 -> 데이터셋 경로 내의 모든 json 파일을 읽어온 후 -> UTF-8로 다시 인코딩 -> 변경된 인코딩형식으로 json파일 저장
위 순서대로 작업한 후 다시 labelme에서 'open dir'을 통해 학습데이터 경로를 불러오니 오류없이 잘 작동합니다.
아래는 코드입니다.
import os
import json
def convert_json_encoding(folder_path):
# 주어진 폴더 내의 모든 파일에 대해 반복
for filename in os.listdir(folder_path):
filepath = os.path.join(folder_path, filename)
# 파일이 JSON 파일인지 확인
if filename.endswith('.json'):
# JSON 파일을 UTF-8 인코딩으로 읽어들임
with open(filepath, 'r', encoding='utf-8-sig') as file:
data = json.load(file)
# 같은 파일을 UTF-8 인코딩으로 다시 저장
with open(filepath, 'w', encoding='utf-8') as file:
json.dump(data, file, ensure_ascii=False, indent=4)
# 변경할 폴더 경로를 지정
folder_path = '/User/Dataset'
# 함수 호출
convert_json_encoding(folder_path)
truck, bus같은 경우 인식 오류가 발생한듯 싶으나 대체로 잘 인식한 걸 확인할 수 있습니다.
Image Detection 사용하기 (2) 터미널 명령어를 파이썬 코드로 실행
import subprocess
# 이미지 파일의 경로
image_path = 'path/to/your/image.jpg'
# detect.py 스크립트를 파이썬으로 호출
result = subprocess.run(['python', 'yolov5/detect.py', '--source', image_path])
terminal 에서 실행한 명령어를 파이썬의 subprocess 패키지를 이용해 코드로 실행한 코드입니다.
Image Detection 사용하기 (3) 파이썬 코드로 실행
모델을 불러오고, 분석할 이미지 파일을 모델에 넣어준 뒤에 결과를 받는 코드입니다.
파이썬 코드로 실행하게 되면 결과에 대한 다양한 값들을 확인하고 응용할 수 있습니다.
import torch
from pathlib import Path
from yolov5 import detect
import os
from PIL import Image, ImageDraw
def vehicle_detection_yolov5(image_path):
model = torch.hub.load('ultralytics/yolov5:master', 'yolov5s')
# Inference
results = model(image_path)
# Results, change the flowing to: results.show()
results.show()
# results.save()
print(results.s)
return results
data_path = 'car_image'
image_files = [f for f in os.listdir(data_path) if f.lower().endswith(('.png', '.jpg', '.jpeg', '.gif'))]
for image_file in image_files:
print(image_file)
results = vehicle_detection_yolov5(f'{data_path}/{image_file}')
print(results.s)
'car_image'라는 폴더 안에 있는 이미지파일들을 일괄적으로 분석할 수 있게 코드를 구현하였습니다.