Untitled
unknown
plain_text
a year ago
2.9 kB
6
Indexable
def classify_image(self, image_path):
try:
print("\n=== Starting Image Classification ===")
# Check internet connection
has_internet = self.check_internet_connection()
print(f"Internet connection: {'Available' if has_internet else 'Not available'}")
root = next(iter(CircularProgress._instances)).winfo_toplevel()
language = getattr(root, 'LANGUAGE', 'EN')
if has_internet:
# Use OpenAI Vision API
print("Using online classification (OpenAI)")
base64_image = self.encode_image(image_path)
prompt = self.bin_config.get_ai_prompt(language)
print("Prompt:", prompt)
response = self.client.chat.completions.create(
model="gpt-4-vision-preview",
messages=[
{
"role": "user",
"content": [
{"type": "text", "text": prompt},
{
"type": "image_url",
"image_url": {
"url": f"data:image/jpeg;base64,{base64_image}"
}
}
]
}
]
)
result = response.choices[0].message.content.strip()
else:
# Use Edge Impulse local model
print("Using offline classification (Edge Impulse)")
if not self.edge_impulse:
raise Exception("Edge Impulse model not initialized")
# Read and classify the image
print("Reading image from:", image_path)
image = cv2.imread(image_path)
if image is None:
raise Exception("Failed to read image")
image_rgb = cv2.cvtColor(image, cv2.COLOR_BGR2RGB)
print("Running classification...")
predictions = self.edge_impulse.classify_image(image_rgb)
print("Raw predictions:", predictions)
# Get the predicted class
max_index = np.argmax(predictions)
result = self.edge_impulse.class_names[max_index]
print(f"Classification result: {result}")
# Find the matching bin ID
bin_id = self.bin_config.get_bin_id_by_name(result)
if bin_id:
print(f"Matched bin ID: {bin_id}")
return result
except Exception as e:
print(f"\n!!! Error during classification: {str(e)}")
traceback.print_exc() # Print full traceback
raise
finally:
print("=== Classification Complete ===\n")
self.cleanup_temp_files()Editor is loading...
Leave a Comment