def _api(self, method, uri, attrs={}): headers = self.API_HEADERS.copy() if self.apikey: headers['apikey'] = self.apikey if self.subkey: headers['subkey'] = self.subkey return API.request(method, self.API_URL + uri, attrs, headers)
def main(): global queue, sep, proc_put_file config = configparser.ConfigParser() config.read(CONFIG_FILE) if (not config) or (not config.sections()): print('No se encontro el archivo de configuracion.') exit(0) ftp_images_folder = config['folders'].get('ftp_images', '') car_images_folder = config['folders'].get('car_images', '.') plates_folder = config['folders'].get('plates', '.') sep = config['folders'].get('folder_sep', '.') car_images_folder = car_images_folder + sep + 'cars_'+dt.now().strftime('%Y-%m-%d') if not os.path.exists(car_images_folder): os.mkdir(car_images_folder) plates_folder = plates_folder + sep + 'plates_' + dt.now().strftime('%Y-%m-%d') if not os.path.exists(plates_folder): os.mkdir(plates_folder) ftp = FTP(url=config['ftp'].get('server_url'), port=int(config['ftp'].get('server_port', '9999')), folder=config['ftp'].get('server_folder', '.'), user=config['ftp'].get('user', 'anonymous'), password=config['ftp'].get('password', '') ) if ftp.connect(): exit(0) if ftp.login(): exit(0) # ftp.change_folder() api = API(api_url=config['api'].get('API_URL', ''), token=config['api'].get('API_TOKEN', ''), ) car_detector = CarDetector(model=os.curdir + sep + config['car_detect'].get('model'), threshold=int(config['car_detect'].get('threshold', '50')), car_percent=float(config['car_detect'].get('car_percent', '4.5')) ) proc_put_file = Process(target=put_file_in_queue, args=(ftp,) ) proc_put_file.start() print('Ready and working..\n') json_result = config['folders'].get('results', '.') + sep + f'plates_result_{dt.now().strftime("%Y-%m-%d")}.json' with open(json_result, 'a') as fp: try: fp.write('[\n') while True: check_folder_day(car_images_folder, 'cars_') check_folder_day(plates_folder, 'plates_') images = get_file_in_queue() if not images: time.sleep(1) continue images_list = [] for image, image_name in images: img = np.frombuffer(image, dtype=np.uint8) img = cv2.imdecode(img, 1) if ftp_images_folder: cv2.imwrite(ftp_images_folder + sep + image_name, img) images_list.append(img) # car_images, dict_unique_cars = car_detector.detect(images_list) dict_unique_cars = car_detector.detect(images_list) for key in dict_unique_cars.keys(): folder = car_images_folder + sep + key + dt.now().strftime('%Y-%m-%d_%H:%M:%S') os.mkdir(folder) for car in dict_unique_cars[key]: car_image_path = folder + sep + 'car_' + str(len(os.listdir(folder))) + '.jpg' if not cv2.imwrite(car_image_path, car): print('No se pudo guardar la imagen en {}'.format(car_image_path)) continue response = api.request(car_image_path) result = response['results'] if 'results' in response else [] if len(result) == 0: print('No results for plate') continue plate, plate_box, right_format = api.improve_plate(result) img_plate = cut_and_save(car_image_path, plate_box, plate, plates_folder) print('Plate detected: {}'.format(plate)) fp.write(str(dict(plate=plate, image_path=car_image_path))) # b64encode(img_plate.tobytes()) fp.flush() if not right_format: continue break except KeyboardInterrupt: fp.write(']\n') raise KeyboardInterrupt