동영상을 영화 및 TV로 보낸다.
색연필 아이콘을 클릭해서 비디오에서 사진저장을 클릭해서 프레임을 저장한다.
그림판에서 감지할 라인을 그려준후 위치를 마우스포인트를 위치에 놓으면 좌표가 좌측 하단에 나온다.
line =[ (158,501), (1061, 504)]
이러한 감지라인을 만들 수 있다.
object_counter={}
dictionary를 생성
Bbox의 bottom center가 저 라인을 intersect하는 경우를 카운트하면 된다.
두 직선의 교차는 아래의 함수로 확인 가능하다
def ccw(A, B, C):
return (C.y-A.y) * (B.x-A.x) > (B.y-A.y) * (C.x-A.x)
def intersect(A, B, C, D):
return ccw(A,C,D) != ccw(B,C,D) and ccw(A,B,C) != ccw(A,B,D)
다음의 코드가 들어간다.
각기 객체에 대한 ID가 있었던 큐에 만약 인터섹트가 발생하면 아이디가 2개 이상이 된다.
data_deque[id].appendleft(center)
if len(data_deque) > 2:
if intersect(data_deque[id][0], data_deque[id][1], line[0], line[1]):
cv2.line(img, line[0], line[1], (255,255,255),3)
if obj_name is not object_counter:
object_counter=1
else:
object_counter+=1
감지선으로 들어오는 차량과 나가는 차량을 구분하는 방법으로 상행과 하행을 나눌 수 있다.
object_count={}
object_count1={}
형태로 dict를 구성해 줘야 한다.
큐에 잡히는 bottom center 포인트가 어느 방향에서 왔는지에 따라 포인트의 위치가 다를 수 밖에 없다.
따라서 포인트의 크기를 비교함으로써 방향을 알게 된다.
def get_direction(point1, point2):
direction_str=""
if point[1] > point[2]:
direction_str +="south"
elseif poin[1] < point[2]:
direction_str +="north"
point[0]을 사용해서 비교한다면 east, west가 구분 가능해진다.
그러나 감지선 근처에서 차선변경이 이루어진다면 어떻게 할까?
도로 방향이 정해져 있다면 상관이 없을 것이고, 예를 들어 일방향 도로
그러나 교차로라면 감지선이 2개 이상이 있어야 할 것이다.
사업단에서 개발한 모델은 감지선 대신 감지구역을 설정되어 있다.
감지구역 형태로 설계한 이유는 bottom center 포인트가 감지선을 넘어버리는 경우가 있다고 한다.
'컴퓨터 비전' 카테고리의 다른 글
Python 인코딩 에러 및 기타 에러 (0) | 2023.11.03 |
---|---|
Image Segmentation 코딩 (1) | 2023.10.18 |
YOLO 트레이닝, roboflow (0) | 2023.10.09 |
YOLOv8 실행 (1) | 2023.10.09 |
Jaccard index (0) | 2023.10.08 |