| | |
| | | |
| | | import datetime |
| | | import cv2 |
| | | from _image_clip_setting import image_clip |
| | | |
| | | time_now = datetime.datetime.now().strftime("%Y-%m-%d-%H-%M-%S") |
| | | #cap = cv2.VideoCapture(0) |
| | |
| | | print('手动设置 唯一的参数: 数字仪表盘的位置: 要稍微留些余量。') |
| | | print('格式为图像区域 [Y轴 min:max, X轴 min:max],如[176:234,280:426]') |
| | | print('另外图形 左上角为0,0 向右 为X轴正向,向下为Y轴正向') |
| | | cv2.imwrite(time_now+"_clip.jpg",frame[176:234,280:426]) |
| | | cv2.imwrite(time_now+"_clip.jpg", |
| | | frame[image_clip[0]:image_clip[1], image_clip[2]:image_clip[3]]) |
| | | cap.release() |
| | | cv2.destroyAllWindows() |
| | |
| | | import cv2 |
| | | import getopt |
| | | import sys |
| | | from _image_clip_setting import image_clip |
| | | |
| | | |
| | | def start_check_opts(argv): |
| | |
| | | from cv2 import waitKey |
| | | import getopt |
| | | import sys |
| | | |
| | | from _image_clip_setting import image_clip |
| | | |
| | | |
| | | def check_frame(frame): |
| | | #image = frame[176:234,280:426] |
| | | image = frame[180:230,250:370] #frame[176:234,280:426] |
| | | |
| | | #cv2.imshow('src',image) |
| | | image = frame[image_clip[0]:image_clip[1], image_clip[2]:image_clip[3]] |
| | | gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY) |
| | | thresh = cv2.threshold(gray, 0, 255, |
| | | cv2.THRESH_BINARY_INV | cv2.THRESH_OTSU)[1] |
| | | kernel = cv2.getStructuringElement(cv2.MORPH_ELLIPSE, (6, 6)) |
| | | counter = cv2.morphologyEx(thresh.copy(), cv2.MORPH_OPEN, kernel) |
| | | image_h = image.shape[0] |
| | | contours, hierarchy = cv2.findContours(counter,cv2.RETR_CCOMP,cv2.CHAIN_APPROX_SIMPLE) |
| | | contours, hierarchy = cv2.findContours(counter,cv2.RETR_TREE,cv2.CHAIN_APPROX_SIMPLE) |
| | | contours_count = 0 |
| | | for c in contours: |
| | | x, y, w, h = cv2.boundingRect(c) |
| | | if image_h*0.98 > h > image_h * 0.3: |
| | | #print((x, y, w, h)) |
| | | if hierarchy[0][contours_count][3] ==0 : |
| | | #if image_h*0.98 > h > image_h * 0.6: |
| | | print((x, y, w, h)) |
| | | cv2.rectangle(image, (x, y), (x+w, y+h), (0, 255, 0), 2) |
| | | contours_count += 1 |
| | | cv2.imshow('frame',image) |
| | | waitKey(0) |
| | | |
| | |
| | | import cv2 |
| | | from cv2 import waitKey |
| | | import uuid |
| | | from _image_clip_setting import image_clip |
| | | |
| | | |
| | | def check_frame(frame): |
| | | image = frame[180:230,250:370] #frame[176:234,280:426] |
| | | image = frame[image_clip[0]:image_clip[1], image_clip[2]:image_clip[3]] |
| | | #cv2.imshow('src',image) |
| | | gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY) |
| | | thresh = cv2.threshold(gray, 0, 255, |
| | | cv2.THRESH_BINARY_INV | cv2.THRESH_OTSU)[1] |
| | | kernel = cv2.getStructuringElement(cv2.MORPH_ELLIPSE, (6, 6)) |
| | | counter = cv2.morphologyEx(thresh.copy(), cv2.MORPH_OPEN, kernel) |
| | | image_h = image.shape[0] |
| | | contours, hierarchy = cv2.findContours(counter,cv2.RETR_CCOMP,cv2.CHAIN_APPROX_SIMPLE) |
| | | contours, hierarchy = cv2.findContours(counter,cv2.RETR_TREE,cv2.CHAIN_APPROX_SIMPLE) |
| | | contours_count = 0 |
| | | for c in contours: |
| | | x, y, w, h = cv2.boundingRect(c) |
| | | if image_h*0.98 > h > image_h * 0.3: |
| | | #print((x, y, w, h)) |
| | | if hierarchy[0][contours_count][3] ==0 : |
| | | #if image_h*0.98 > h > image_h * 0.6: |
| | | print((x, y, w, h)) |
| | | cv2.rectangle(image, (x, y), (x+w, y+h), (0, 255, 0), 2) |
| | | contours_count += 1 |
| | | cv2.imshow('frame',image) |
| | | if cv2.waitKey(100) & 0xFF == ord('q'): #按q退出 |
| | | cv2.waitKey(0) |
| | | |
| | | cap = cv2.VideoCapture("video2.mp4") # for testing |
| | | cap = cv2.VideoCapture("video.mp4") # for testing |
| | | while(cap.isOpened()): |
| | | ret, frame = cap.read() |
| | | if ret==True: |
| | |
| | | import getopt |
| | | import sys |
| | | import numpy as np |
| | | from _image_clip_setting import image_clip |
| | | |
| | | |
| | | def task_init_load_digits(): |
| | |
| | | |
| | | |
| | | def check_frame(frame): |
| | | #image = frame[176:234, 280:426] |
| | | image = frame[170:240,250:370] #frame[176:234,280:426] |
| | | cv2.rectangle(image, (250, 170), (370, 240), (0, 255, 0), 2) |
| | | cv2.imshow('rect',image) |
| | | waitKey(0) |
| | | image = frame[image_clip[0]:image_clip[1], image_clip[2]:image_clip[3]] |
| | | gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY) |
| | | thresh = cv2.threshold(gray, 0, 255, |
| | | cv2.THRESH_BINARY_INV | cv2.THRESH_OTSU)[1] |
| | | kernel = cv2.getStructuringElement(cv2.MORPH_ELLIPSE, (6, 6)) |
| | | counter = cv2.morphologyEx(thresh.copy(), cv2.MORPH_OPEN, kernel) |
| | | image_h = image.shape[0] |
| | | contours, hierarchy = cv2.findContours( |
| | | counter, cv2.RETR_CCOMP, cv2.CHAIN_APPROX_SIMPLE) |
| | | contours, hierarchy = cv2.findContours(counter,cv2.RETR_TREE,cv2.CHAIN_APPROX_SIMPLE) |
| | | contours_count = 0 |
| | | return_numbers = [] |
| | | for c in contours: |
| | | x, y, w, h = cv2.boundingRect(c) |
| | | if image_h*0.98 > h > image_h * 0.3: |
| | | if hierarchy[0][contours_count][3] ==0 : |
| | | #if image_h*0.98 > h > image_h * 0.6: |
| | | print((x, y, w, h)) |
| | | cv2.rectangle(image, (x, y), (x+w, y+h), (0, 255, 0), 2) |
| | | one_number = get_most_simmilar_digit(cv2.threshold(cv2.resize( |
| | |
| | | return_numbers.append([x, one_number]) |
| | | else: |
| | | return return_numbers, False |
| | | contours_count += 1 |
| | | return_numbers = np.array(sorted(return_numbers)) |
| | | return return_numbers[:, -1], True |
| | | |
| | |
| | | cv2.putText(image, str(digit), (280, 170), cv2.FONT_HERSHEY_COMPLEX, 1.0, (100, 200, 200), 5) |
| | | cv2.imshow('add_text',image) |
| | | waitKey(0) |
| | | |
| | |
| | | import time |
| | | import cv2 |
| | | from cv2 import waitKey |
| | | import uuid |
| | | |
| | | # -*- coding: utf-8 -*- |
| | | import datetime |
| | | import cv2 |
| | | from cv2 import waitKey |
| | | import getopt |
| | | import sys |
| | | import numpy as np |
| | | import uuid |
| | | from _image_clip_setting import image_clip |
| | | |
| | | |
| | | def task_init_load_digits(): |
| | |
| | | |
| | | |
| | | def get_digit(frame): |
| | | image = frame[177:233,250:370] #frame[176:234,280:426] |
| | | # cv2.imshow('src',image) |
| | | image = frame[image_clip[0]:image_clip[1], image_clip[2]:image_clip[3]] |
| | | gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY) |
| | | thresh = cv2.threshold(gray, 0, 255, |
| | | cv2.THRESH_BINARY_INV | cv2.THRESH_OTSU)[1] |
| | |
| | | counter = cv2.morphologyEx(thresh.copy(), cv2.MORPH_OPEN, kernel) |
| | | image_h = image.shape[0] |
| | | contours, hierarchy = cv2.findContours( |
| | | counter, cv2.RETR_CCOMP, cv2.CHAIN_APPROX_SIMPLE) |
| | | counter, cv2.RETR_TREE, cv2.CHAIN_APPROX_SIMPLE) |
| | | contours_count = 0 |
| | | return_numbers = [] |
| | | for c in contours: |
| | | x, y, w, h = cv2.boundingRect(c) |
| | | print((x, y, w, h)) |
| | | if image_h*0.98 > h > image_h * 0.3: |
| | | if hierarchy[0][contours_count][3] ==0 : |
| | | #if image_h*0.98 > h > image_h * 0.3: |
| | | #print((x, y, w, h)) |
| | | #cv2.rectangle(image, (x, y), (x+w, y+h), (0, 255, 0), 2) |
| | | one_number = get_most_simmilar_digit(cv2.threshold(cv2.resize( |
| | |
| | | else: |
| | | return return_numbers, False |
| | | cv2.rectangle(image, (x, y), (x+w, y+h), (0, 255, 0), 2) |
| | | contours_count += 1 |
| | | cv2.imshow('frame', image) |
| | | return_numbers = np.array(sorted(return_numbers)) |
| | | return return_numbers[:, -1], True |
| | |
| | | # do got another image |
| | | print('fails') |
| | | fail_count += 1 |
| | | cv2.rectangle(frame, (250, 177), (370, 233), (0, 255, 0), 2) |
| | | cv2.rectangle(frame, (image_clip[2], image_clip[0]), (image_clip[3], image_clip[1]), (0, 255, 0), 2) |
| | | cv2.imwrite('./fails/count_fail_'+str(uuid.uuid1())+'.jpg',frame) |
| | | |
| | | else: |
| | | print('fails') |
| | | fail_count +=1 |
| | | cv2.rectangle(frame, (250, 177), (370, 233), (0, 255, 0), 2) |
| | | cv2.rectangle(frame, (image_clip[2], image_clip[0]), (image_clip[3], image_clip[1]), (0, 255, 0), 2) |
| | | cv2.imwrite('./fails/status_fail_'+str(uuid.uuid1())+'.jpg',frame) |
| | | print(round(digit,2)) |
| | | cv2.putText(frame, str(round(digit,2)), (280, 170), |
| | | cv2.putText(frame, str(round(digit,2)), (image_clip[2], image_clip[0]-50), |
| | | cv2.FONT_HERSHEY_COMPLEX, 1.0, (100, 200, 200), 5) |
| | | cv2.imshow('add_text', frame) |
| | | if cv2.waitKey(5) & 0xFF == ord('q'): # 按q退出 |
| | | cv2.waitKey(0) |
| | | |
| | | |
| | | cap = cv2.VideoCapture("video2.mp4") # for testing |
| | | cap = cv2.VideoCapture("video.mp4") # for testing |
| | | total_frame = 0 |
| | | while(cap.isOpened()): |
| | | ret, frame = cap.read() |
| New file |
| | |
| | | # -*- coding: utf-8 -*- |
| | | __author__ = '上海色宁' |
| | | |
| | | image_clip = [176,234,278,422] # for video.mp4 |
| | |
| | | cv2.THRESH_BINARY_INV | cv2.THRESH_OTSU)[1] |
| | | kernel = cv2.getStructuringElement(cv2.MORPH_ELLIPSE, (6, 6)) |
| | | counter = cv2.morphologyEx(thresh.copy(), cv2.MORPH_OPEN, kernel) |
| | | image_h = image.shape[0] |
| | | contours, hierarchy = cv2.findContours( |
| | | counter, cv2.RETR_CCOMP, cv2.CHAIN_APPROX_SIMPLE) |
| | | #image_h = image.shape[0] |
| | | contours, hierarchy = cv2.findContours(counter, cv2.RETR_TREE, cv2.CHAIN_APPROX_SIMPLE) |
| | | return_numbers = [] |
| | | contours_count = 0 |
| | | for c in contours: |
| | | x, y, w, h = cv2.boundingRect(c) |
| | | if image_h*0.98 > h > image_h * 0.3: |
| | | #if image_h*0.98 > h > image_h * 0.3: |
| | | if hierarchy[0][contours_count][3] ==0 : |
| | | #print((x, y, w, h)) |
| | | #cv2.rectangle(image, (x, y), (x+w, y+h), (0, 255, 0), 2) |
| | | one_number = get_most_simmilar_digit(cv2.threshold(cv2.resize( |