SECOS Sawit API Documentation
API untuk deteksi kematangan kelapa sawit menggunakan machine learning dan computer vision.
Base URL
https://apipython.fekusadev.com
Supported Formats
- Request: multipart/form-data, application/json
- Response: application/json
- Image Types: JPEG, PNG, WebP
- Max File Size: 10MB
Rate Limits
- Free Tier: 100 requests per hour
- Premium: 1000 requests per hour
- Enterprise: Unlimited
Authentication
Currently, the API is open and does not require authentication. For production use, API keys will be implemented.
Future Authentication (Coming Soon)
Headers: Authorization: Bearer YOUR_API_KEY Content-Type: application/json
Palm Oil Ripeness Detection
POST
/detect-ripeness
Mendeteksi tingkat kematangan tandan kelapa sawit dari gambar.
Parameters
- file (required): Image file (JPEG, PNG, WebP, max 10MB)
Example Request
curl -X POST \ https://apipython.fekusadev.com/detect-ripeness \ -F "file=@palm_oil_image.jpg"
Example Response
{
"prediction": "Matang",
"confidence": 0.95,
"processing_time": 0.234,
"timestamp": "2024-01-15T10:30:00Z",
"model_version": "v2.1.0"
}
Advanced Detection
POST
/detect-ripeness-advanced
Deteksi kematangan dengan opsi konfigurasi lanjutan.
Parameters
- file (required): Image file
- confidence_threshold (optional): Minimum confidence level (0.0-1.0)
- return_probabilities (optional): Return all class probabilities
Example Response
{
"prediction": "Matang",
"confidence": 0.95,
"probabilities": {
"Matang": 0.95,
"Belum Matang": 0.03,
"Terlalu Matang": 0.02
},
"processing_time": 0.345,
"metadata": {
"image_size": [640, 480],
"preprocessing_applied": ["resize", "normalize"]
}
}
Bounding Box Detection
POST
/detect-ripeness-bbox
Deteksi dengan lokasi bounding box objek tandan sawit.
Example Response
{
"prediction": "Matang",
"confidence": 0.92,
"bounding_boxes": [
{
"x": 120,
"y": 80,
"width": 200,
"height": 150,
"confidence": 0.92,
"class": "Matang"
}
],
"object_count": 1
}
Batch Processing
POST
/detect-ripeness-batch
Memproses multiple gambar sekaligus.
Parameters
- files (required): Array of image files (max 10 files)
Example Response
{
"batch_id": "batch_123456",
"total_images": 5,
"results": [
{
"filename": "image1.jpg",
"prediction": "Matang",
"confidence": 0.95
},
{
"filename": "image2.jpg",
"prediction": "Belum Matang",
"confidence": 0.88
}
],
"processing_time": 1.234
}
GET
/batch-result/{batch_id}
Mendapatkan hasil batch processing.
Model Information
GET
/model/info
Informasi detail tentang model machine learning.
Example Response
{
"model_name": "PalmOilRipenessClassifier",
"version": "v2.1.0",
"architecture": "ResNet50",
"training_date": "2024-01-10",
"accuracy": 0.94,
"classes": [
"Matang",
"Belum Matang",
"Terlalu Matang",
"Busuk",
"Tandan Kosong",
"Kurang Matang"
],
"input_size": [224, 224, 3],
"total_parameters": 25557032
}
GET
/model/classes
Daftar kelas yang dapat diprediksi model.
Statistics & Analytics
GET
/stats/predictions
Statistik prediksi yang telah dilakukan.
Example Response
{
"total_predictions": 15847,
"today_predictions": 234,
"average_confidence": 0.91,
"top_classes": [
{"class": "Matang", "count": 6523},
{"class": "Belum Matang", "count": 4756},
{"class": "Terlalu Matang", "count": 2341}
]
}
GET
/stats/accuracy
Metrik akurasi model.
Health Check
GET
/health
Mengecek status kesehatan API.
Example Response
{
"status": "healthy",
"timestamp": "2024-01-15T10:30:00Z",
"uptime": "5 days, 12 hours",
"version": "1.0.0",
"model_loaded": true,
"gpu_available": true,
"memory_usage": "2.1GB",
"request_count": 15847
}
Error Codes
HTTP Status Codes
- 200 OK: Request berhasil
- 400 Bad Request: Parameter tidak valid
- 413 Payload Too Large: File terlalu besar (>10MB)
- 415 Unsupported Media Type: Format file tidak didukung
- 429 Too Many Requests: Rate limit terlampaui
- 500 Internal Server Error: Error pada server
- 503 Service Unavailable: Service sedang maintenance
Error Response Format
{
"error": true,
"message": "File size too large. Maximum 10MB allowed.",
"code": "FILE_TOO_LARGE",
"timestamp": "2024-01-15T10:30:00Z"
}
JavaScript SDK
Installation
Include the API service in your project:
<script src="js/api.js"></script>
Basic Usage
// Initialize API
const api = new APIService();
// Detect ripeness
async function detectRipeness(imageFile) {
try {
const result = await api.detectRipeness(imageFile);
if (result.success) {
console.log('Prediction:', result.data.prediction);
console.log('Confidence:', result.data.confidence);
} else {
console.error('Error:', result.message);
}
} catch (error) {
console.error('Request failed:', error);
}
}
// Check API status
async function checkStatus() {
const status = await api.checkStatus();
console.log('API Status:', status);
}
Advanced Features
// Batch processing
const files = [file1, file2, file3];
const batchResult = await api.detectRipenessBatch(files);
// With metadata
const result = await api.detectWithMetadata(imageFile, {
location: { lat: -6.2088, lng: 106.8456 },
timestamp: new Date().toISOString(),
weather: { temperature: 28, humidity: 75 }
});
// Image validation
const validation = await api.validateImage(imageFile);
if (!validation.valid) {
alert(validation.message);
}