Spaces:
Sleeping
Sleeping
File size: 2,978 Bytes
74c6580 a8d57c0 74c6580 a8d57c0 fd69589 7a25912 a8d57c0 7a25912 a8d57c0 74c6580 a8d57c0 74c6580 fd69589 74c6580 bfbd5ae 74c6580 af06ad9 74c6580 fd69589 7a25912 fd69589 7a25912 fd69589 74c6580 7a25912 6f5895c 640ce1c cba5df4 fd69589 74c6580 a8d57c0 af06ad9 a8d57c0 |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 |
import os
import gradio as gr
import pytesseract
import yolov5
from transformers import CLIPProcessor, CLIPModel
model = CLIPModel.from_pretrained("openai/clip-vit-base-patch32")
processor = CLIPProcessor.from_pretrained("openai/clip-vit-base-patch32")
# # load model
# model = yolov5.load('keremberke/yolov5m-license-plate')
# # set model parameters
# model.conf = 0.5 # NMS confidence threshold
# model.iou = 0.25 # NMS IoU threshold
# model.agnostic = False # NMS class-agnostic
# model.multi_label = False # NMS multiple labels per box
# model.max_det = 1000 # maximum number of detections per image
def license_plate_detect(img):
results = model(img, size=640)
# parse results
predictions = results.pred[0]
if len(predictions):
boxes = predictions[:, :4] # x1, y1, x2, y2
return boxes
def read_license_number(img):
boxes = license_plate_detect(img)
if boxes is not None:
return [pytesseract.image_to_string(
img.crop(bbox.tolist()))
for bbox in boxes]
def zero_shot_classification(image, labels):
print(type(image))
inputs = processor(text=labels,
images=image,
return_tensors="pt",
padding=True)
print(type(inputs))
print(inputs)
outputs = model(**inputs)
logits_per_image = outputs.logits_per_image # this is the image-text similarity score
return logits_per_image.softmax(dim=1) # we can take the softmax to get the label probabilities
installed_list = []
# image = Image.open(requests.get(url, stream=True).raw)
def check_solarplant_installed_by_license(license_number_list):
if len(installed_list):
return [license_number in installed_list
for license_number in license_number_list]
def check_solarplant_installed_by_image(image, output_label=False):
zero_shot_class_labels = ["bus with solar panel grids",
"bus without solar panel grids"]
probs = zero_shot_classification(image, zero_shot_class_labels)
if output_label:
return zero_shot_class_labels[probs.argmax().item()]
return probs.argmax().item() == 0
def check_solarplant_broken(image):
zero_shot_class_labels = ["white broken solar panel",
"normal black solar panel grids"]
probs = zero_shot_classification(image, zero_shot_class_labels)
idx = probs.argmax().item()
return zero_shot_class_labels[idx][1-idx]
def greet(img):
print(type(img))
# lns = read_license_number(img)
lns = ['1','2','3']
if len(lns):
# return (seg,
return ("車牌: " + '; '.join(lns) + "\n\n" \
+ "類型: "+ check_solarplant_installed_by_image(img, True) + "\n\n" \
+ "狀態:" + check_solarplant_broken(img))
return (img, "空地。。。")
iface = gr.Interface(fn=greet, inputs=gr.Image(type="pil"), outputs="text")
iface.launch() |