Spaces:
Sleeping
Sleeping
import cv2 | |
import os | |
import numpy as np | |
from pyzbar.pyzbar import decode | |
from fastapi import FastAPI, File, UploadFile | |
from typing import List | |
import shutil | |
from logging import getLogger, StreamHandler, DEBUG | |
logger = getLogger(__name__) | |
handler = StreamHandler(); handler.setLevel(DEBUG) | |
logger.setLevel(DEBUG) | |
logger.addHandler(handler) | |
logger.propagate = False | |
def qrdec_zbar(image_path): | |
# load image | |
image = cv2.imread(image_path) | |
# QRコードをデコードする | |
dec_infos = decode(image) | |
result_data = "" | |
readable = False | |
if dec_infos: | |
for dec_info in dec_infos: | |
if not dec_info =="": | |
result_data = dec_info.data.decode("utf-8") | |
readable = True | |
break | |
else: | |
pass | |
return {"data": result_data, "readable": readable} | |
# ----------------------------------------------------------- | |
# initial | |
# ----------------------------------------------------------- | |
font = cv2.FONT_HERSHEY_SIMPLEX | |
# ----------------------------------------------------------- | |
# function_qr_dec | |
# ----------------------------------------------------------- | |
def qrdec_cv2(img_bgr): | |
# QRCodeDetectorインスタンス生成 | |
qrd = cv2.QRCodeDetector() | |
# QRコードデコード | |
retval, dec_infos, _, _ = qrd.detectAndDecodeMulti(img_bgr) | |
result_data = "" | |
readable = False | |
if retval: | |
for dec_info in dec_infos: | |
if not dec_info=="": | |
result_data = dec_info | |
readable = True | |
break | |
else: | |
pass | |
return {"data": result_data, "readable": readable} | |
# ----------------------------------------------------------- | |
# sample program | |
# ----------------------------------------------------------- | |
def qrdec(file_path): | |
img_BGR = cv2.imread(file_path, cv2.IMREAD_COLOR) | |
cv2_result = qrdec_cv2(img_BGR) | |
zbar_result = qrdec_zbar(file_path) | |
is_safe_to_read = cv2_result["readable"] and zbar_result["readable"] | |
readable = cv2_result["readable"] or zbar_result["readable"] | |
decoded = "" | |
if cv2_result["readable"]: | |
decoded = cv2_result["data"] | |
elif zbar_result["readable"]: | |
decoded = zbar_result["data"] | |
return {"is_safe_to_read": is_safe_to_read, "readable": readable, "decoded": decoded} | |
app = FastAPI() | |
async def upload_image(image: UploadFile = File(...)): | |
temp_file_path = os.path.join('/tmp', image.filename) | |
# 画像ファイルの内容を保存または処理する | |
with open(temp_file_path, "wb") as buffer: | |
shutil.copyfileobj(image.file, buffer) | |
# logger.info(f"target file : {temp_file_path}") | |
result = qrdec(temp_file_path) | |
# logger.info(f"response : {result}") | |
return result | |