aiEvaluateImageToScore
parent
9fa326666f
commit
ddc864a25d
|
@ -1,15 +1,103 @@
|
||||||
const AWS = require('aws-sdk');
|
const AWS = require('aws-sdk');
|
||||||
const FormData = require('form-data');
|
const axios = require('axios');
|
||||||
|
const mongoose = require('mongoose');
|
||||||
|
const Game = require('./Game'); // Ensure this path matches your project structure
|
||||||
|
|
||||||
const aiEvaluateImageToScore = async (req, res) => {
|
const aiEvaluateImageToScore = async (req, res) => {
|
||||||
AWS.config.update({
|
try {
|
||||||
region: 'ap-south-1',
|
// Destructure data from req.body
|
||||||
accessKeyId: process.env.AWS_ACCESS_KEY_ID,
|
const { userId, gameName, gameID, gameTime, gameStar, screenShot } = req.body;
|
||||||
secretAccessKey: process.env.AWS_SECRET_ACCESS_KEY,
|
|
||||||
});
|
|
||||||
|
|
||||||
|
if (!screenShot) {
|
||||||
|
return res.status(400).json({ error: 'Screenshot is required' });
|
||||||
|
}
|
||||||
|
|
||||||
|
// Decode the base64 image
|
||||||
|
const buffer = Buffer.from(screenShot, 'base64');
|
||||||
|
const fileName = `${Date.now()}-${gameID}.png`; // Unique filename
|
||||||
|
const bucketName = process.env.S3_BUCKET_NAME;
|
||||||
|
|
||||||
|
// Initialize S3
|
||||||
|
AWS.config.update({
|
||||||
|
region: 'ap-south-1',
|
||||||
|
accessKeyId: process.env.AWS_ACCESS_KEY_ID,
|
||||||
|
secretAccessKey: process.env.AWS_SECRET_ACCESS_KEY,
|
||||||
|
});
|
||||||
|
const s3 = new AWS.S3();
|
||||||
|
|
||||||
|
// Upload the image to S3
|
||||||
|
const s3Params = {
|
||||||
|
Bucket: bucketName,
|
||||||
|
Key: `screenshots/${fileName}`,
|
||||||
|
Body: buffer,
|
||||||
|
ContentType: 'image/png',
|
||||||
|
ACL: 'public-read', // Make the file publicly accessible
|
||||||
|
};
|
||||||
|
|
||||||
|
const s3UploadResponse = await s3.upload(s3Params).promise();
|
||||||
|
const screenshotUrl = s3UploadResponse.Location;
|
||||||
|
|
||||||
|
// Prepare the OpenAI API request
|
||||||
|
const openAiPayload = {
|
||||||
|
model: 'gpt-4o-mini',
|
||||||
|
messages: [
|
||||||
|
{
|
||||||
|
role: 'user',
|
||||||
|
content: [
|
||||||
|
{
|
||||||
|
type: 'text',
|
||||||
|
text: 'The coloring was done by a 5-year-old kid. Give a score between 1 to 10 in JSON format.',
|
||||||
|
},
|
||||||
|
{
|
||||||
|
type: 'image_url',
|
||||||
|
image_url: {
|
||||||
|
url: screenshotUrl,
|
||||||
|
},
|
||||||
|
},
|
||||||
|
],
|
||||||
|
},
|
||||||
|
],
|
||||||
|
max_tokens: 300,
|
||||||
|
};
|
||||||
|
|
||||||
|
// Call the OpenAI API
|
||||||
|
const openAiResponse = await axios.post(
|
||||||
|
'https://api.openai.com/v1/chat/completions',
|
||||||
|
openAiPayload,
|
||||||
|
{
|
||||||
|
headers: {
|
||||||
|
'Content-Type': 'application/json',
|
||||||
|
Authorization: `Bearer ${process.env.OPENAI_API_KEY}`,
|
||||||
|
},
|
||||||
|
}
|
||||||
|
);
|
||||||
|
|
||||||
|
// Extract the score from OpenAI's response
|
||||||
|
const scoreResponse = openAiResponse.data.choices[0].message.content;
|
||||||
|
const parsedScore = JSON.parse(scoreResponse);
|
||||||
|
|
||||||
|
// Save to MongoDB
|
||||||
|
const gameData = new Game({
|
||||||
|
gameName,
|
||||||
|
userId,
|
||||||
|
gameID,
|
||||||
|
gameTime,
|
||||||
|
score: parsedScore.score || 'N/A', // Adjust key to match OpenAI response
|
||||||
|
gameStar,
|
||||||
|
screenshotUrl,
|
||||||
|
});
|
||||||
|
|
||||||
|
await gameData.save();
|
||||||
|
|
||||||
|
// Respond with the saved data
|
||||||
|
return res.status(201).json({
|
||||||
|
message: 'Game data saved successfully',
|
||||||
|
data: gameData,
|
||||||
|
});
|
||||||
|
} catch (error) {
|
||||||
|
console.error('Error:', error.message);
|
||||||
|
return res.status(500).json({ error: 'Something went wrong' });
|
||||||
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
module.exports = aiEvaluateImageToScore;
|
module.exports = aiEvaluateImageToScore;
|
||||||
|
|
Loading…
Reference in New Issue