Untitled
unknown
plain_text
8 months ago
2.2 kB
8
Indexable
from rest_framework import serializers
from .models import Drug
class DrugSerializer(serializers.ModelSerializer):
class Meta:
model = Drug
fields = ['name', 'description', 'image']
/////////////////////////////////////////////
from rest_framework import serializers
from .models import Drug
class DrugSerializer(serializers.ModelSerializer):
class Meta:
model = Drug
fields = ['name', 'description', 'image']
///////////////////////////////
# DrugSearchByImageView: Searches for the most similar Drug by comparing image hashes.
class DrugSearchByImageView(APIView):
def post(self, request, *args, **kwargs):
# Check if the image is provided
if 'image' not in request.FILES:
return Response({'error': 'No image provided'}, status=status.HTTP_400_BAD_REQUEST)
uploaded_image = request.FILES['image']
# Convert uploaded image to hash
try:
uploaded_image_pil = Image.open(uploaded_image)
uploaded_image_hash = imagehash.phash(uploaded_image_pil)
except Exception as e:
return Response({'error': f'Error processing uploaded image: {str(e)}'},
status=status.HTTP_400_BAD_REQUEST)
# Find the drug with the most similar image
closest_match = None
min_diff = float('inf')
drugs = Drug.objects.all()
for drug in drugs:
try:
drug_image = Image.open(drug.image.path)
drug_image_hash = imagehash.phash(drug_image)
except Exception as e:
# Skip this drug if there's an issue with its image.
continue
diff = uploaded_image_hash - drug_image_hash
if diff < min_diff:
min_diff = diff
closest_match = drug
# Return the closest match as JSON response
if closest_match:
drug_data = DrugSerializer(closest_match)
return Response(drug_data.data, status=status.HTTP_200_OK)
else:
return Response({'error': 'No matching drug found'}, status=status.HTTP_404_NOT_FOUND)Editor is loading...
Leave a Comment