コード例 #1
0
ファイル: hubdns.py プロジェクト: btolfa/hubdns
 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)
コード例 #2
0
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