Spaces:
Running
Running
File size: 3,729 Bytes
052e52f 3f861d9 cbda7a6 3f861d9 052e52f cbda7a6 052e52f cbda7a6 052e52f cbda7a6 3f861d9 cbda7a6 3f861d9 cbda7a6 3f861d9 cbda7a6 3f861d9 e615e06 052e52f f586e58 052e52f cbda7a6 d27eb97 cbda7a6 d27eb97 3f861d9 d27eb97 3f861d9 d27eb97 e615e06 3f861d9 e615e06 3f861d9 e615e06 d27eb97 cbda7a6 052e52f 3f861d9 052e52f cbda7a6 052e52f cbda7a6 052e52f d173c0d |
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 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 |
from flask import Flask, request
from twilio.twiml.messaging_response import MessagingResponse
from twilio.rest import Client
import os
import requests
from PIL import Image
import io
import uuid
app = Flask(__name__)
UPLOAD_FOLDER = 'uploads'
if not os.path.exists(UPLOAD_FOLDER):
os.makedirs(UPLOAD_FOLDER)
# Initialize the Flask app
account_sid = os.environ.get('TWILIO_ACCOUNT_SID')
auth_token = os.environ.get('TWILIO_AUTH_TOKEN')
client = Client(account_sid, auth_token)
# WhatsApp number to send messages from (your Twilio number)
from_whatsapp_number = 'whatsapp:+14155238886'
# Placeholder functions for image classification
def classify_pest(image_path):
# Implement pest classification model here
return f"Detected Pest: [Pest Name] for image at {image_path}"
def classify_disease(image_path):
# Implement disease classification model here
return f"Detected Disease: [Disease Name] for image at {image_path}"
@app.route('/whatsapp', methods=['POST'])
def whatsapp_webhook():
incoming_msg = request.values.get('Body', '').lower()
sender = request.values.get('From')
# Check if an image is attached
num_media = int(request.values.get('NumMedia', 0))
if num_media > 0:
media_sid = request.values.get('MediaSid0')
content_type = request.values.get('MediaContentType0')
if content_type.startswith('image/'):
try:
# Retrieve the media using Twilio client
media = client.messages.media(request.values.get('MessageSid')).list()[0]
# Generate a unique filename
filename = f"{uuid.uuid4()}.jpg"
filepath = os.path.join(UPLOAD_FOLDER, filename)
# Download and save the image
with open(filepath, 'wb') as f:
f.write(media.fetch())
if 'pest' in incoming_msg:
response_text = classify_pest(filepath)
elif 'disease' in incoming_msg:
response_text = classify_disease(filepath)
else:
response_text = "Please specify if you want to detect a pest or a disease."
except Exception as e:
print(f"Error processing image: {e}")
response_text = "Failed to process the image. Please try again."
else:
response_text = "The attached file is not an image. Please send an image for classification."
elif 'bookkeeping' in incoming_msg:
response_text = "Please provide the details you'd like to record."
else:
response_text = get_agricultural_insights(incoming_msg)
send_message(sender, response_text)
return '', 204 # Return an empty response to Twilio
def get_agricultural_insights(query):
# Implement your agricultural insights logic here
return query
def send_message(to, body):
try:
message = client.messages.create(
from_=from_whatsapp_number,
body=body,
to=to
)
print(f"Message sent with SID: {message.sid}")
except Exception as e:
print(f"Error sending message: {e}")
# Function to send an initial message
def send_initial_message(to_number):
send_message(
f'whatsapp:{to_number}',
'Welcome to the Agri AI Chatbot! How can I assist you today? You can send an image with "pest" or "disease" to classify it.'
)
if __name__ == '__main__':
# Send an initial message when the script starts
send_initial_message('916382792828') # Replace with the recipient's number
# Start the Flask server
app.run(host='0.0.0.0', port=7860) |