ابنِ باستخدام ذكاء الفيديو.
يدعم API المنشور من Seeknetic تضمينات النصوص، وتضمينات الفيديو غير المتزامنة، ورفع الموترات، ووسوم اللقطات الاحترافية.
المصادقة
قدّم مفتاح API في ترويسة X-API-Key. أنشئ مفتاحك أو أدِره من حساب Seeknetic.
تدعم API المنشورة أيضًا Authorization: Bearer <API_KEY> بدلًا من X-API-Key. استخدم طريقة مصادقة واحدة لكل طلب.
عنوان URL الأساسي: https://api.seeknetic.com
تحتفظ الشيفرة ومعرّفات API وقيم الطلبات بلغتها التقنية الأصلية.
تضمين النص
شفّر الاستعلام النصي إلى متجه تضمين للمقارنة الدلالية مع الوسائط المفهرسة.
/video_embedding/encode_text curl -X POST "https://api.seeknetic.com/video_embedding/encode_text" \
-H "X-API-Key: {your_api_key}" \
-H "Content-Type: application/json" \
-d '{"text":"A dog playing in the park"}' Python / مثال
import requests
response = requests.post(
"https://api.seeknetic.com/video_embedding/encode_text",
headers={
"X-API-Key": "{your_api_key}",
"Content-Type": "application/json"
},
json={"text": "A dog playing in the park"}
)
result = response.json()
print(f"Text embedding dimension: {len(result['embedding'])}") تضمين الفيديو
أرسل فيديو مستضافاً للتشفير غير المتزامن. احفظ request_id المُعاد واستعلم عن الحالة للحصول على النتيجة.
للمدخلات المُعالجة مسبقًا، استخدم tensor.video_input_key وtensor.audio_input_key المُعادَين من نقطة رفع الموترات.
/video_embedding/encode_video/async curl -X POST "https://api.seeknetic.com/video_embedding/encode_video/async" \
-H "X-API-Key: {your_api_key}" \
-H "Content-Type: application/json" \
-d '{"video_url":"https://example.com/video.mp4"}' Python / مثال
import requests
import time
# 1. Submit async task
response = requests.post(
"https://api.seeknetic.com/video_embedding/encode_video/async",
headers={
"X-API-Key": "{your_api_key}",
"Content-Type": "application/json"
},
json={"video_url": "https://example.com/video.mp4"}
)
request_id = response.json()["request_id"]
print(f"Task submitted, Request ID: {request_id}")
# 2. Poll status until completion
while True:
status_response = requests.get(
f"https://api.seeknetic.com/async_status/{request_id}",
headers={"X-API-Key": "{your_api_key}"}
)
status_data = status_response.json()
status = status_data['status']
if status == 'completed':
embedding = status_data['embedding']
print(f"Complete! Dimension: {len(embedding)}")
break
elif status == 'failed':
print(f"Failed: {status_data['error_message']}")
break
time.sleep(2) رفع الموترات
ارفع موترات الفيديو والصوت المعالجة مسبقاً، ثم استخدم مفاتيح الإدخال المُعادة في طلب النموذج غير المتزامن.
/files/upload/tensors curl -X POST "https://api.seeknetic.com/files/upload/tensors" \
-H "X-API-Key: {your_api_key}" \
-H "Content-Type: application/json" \
-d '{
"service":"embedding",
"request_id":"emb-task-0001",
"video_input":{"data":"AAAB...","shape":[1,12,3,224,224],"dtype":"uint8"},
"audio_input":{"data":"AAAB...","shape":[1,1,220500],"dtype":"float32"}
}' Python / مثال
import requests
response = requests.post(
"https://api.seeknetic.com/files/upload/tensors",
headers={
"X-API-Key": "{your_api_key}",
"Content-Type": "application/json"
},
json={
"service": "embedding",
"request_id": "emb-task-0001",
"video_input": {
"data": "AAAB...",
"shape": [1, 12, 3, 224, 224],
"dtype": "uint8"
},
"audio_input": {
"data": "AAAB...",
"shape": [1, 1, 220500],
"dtype": "float32"
}
}
)
print(response.json()) وسوم اللقطات
أرسل فيديو لتوليد بيانات وصفية احترافية للقطات بشكل غير متزامن.
لمدخلات الوسم المُعالجة مسبقًا، استخدم tensor.video_input_key وtensor.video_kwargs_key المُعادَين من نقطة رفع الموترات.
/video_tagging/async curl -X POST "https://api.seeknetic.com/video_tagging/async" \
-H "X-API-Key: {your_api_key}" \
-H "Content-Type: application/json" \
-d '{"video_url":"https://example.com/video.mp4"}' Python / مثال
import requests
# Submit async tagging task
response = requests.post(
"https://api.seeknetic.com/video_tagging/async",
headers={
"X-API-Key": "{your_api_key}",
"Content-Type": "application/json"
},
json={"video_url": "https://example.com/video.mp4"}
)
request_id = response.json()["request_id"]
print(f"Tagging task submitted, Request ID: {request_id}") حالة المهمة غير المتزامنة
تحقّق من الطلب المرسل. تابع الاستعلام أثناء الانتظار أو المعالجة، وراجع النتيجة عند اكتمال المهمة.
حالات المهمة: pending → processing → completed. تتضمن المهمة الفاشلة الحقل error_message.
/async_status/{request_id} curl -X GET "https://api.seeknetic.com/async_status/{request_id}" \
-H "X-API-Key: {your_api_key}" Python / مثال
import requests
request_id = "your_request_id_from_async_call"
response = requests.get(
f"https://api.seeknetic.com/async_status/{request_id}",
headers={"X-API-Key": "{your_api_key}"}
)
status_data = response.json()
print(f"Status: {status_data['status']}")
if status_data['status'] == 'completed':
print(f"Result: {status_data['embedding']}") الأخطاء وإعادة المحاولة
تحقّق من المدخلات عند الرد 400 ومن بيانات المصادقة عند 401. خفّض وتيرة الطلبات بعد 429. أعد محاولة أخطاء الخادم المؤقتة بعدد محدود من المحاولات.
| حالة HTTP | المعنى | الإجراء |
|---|---|---|
| 400 | طلب غير صالح | تحقّق من JSON والحقول المطلوبة. |
| 401 | فشل المصادقة | تحقّق من مفتاح API ولا تكشفه في كود الواجهة. |
| 402 | تجاوز الحصة | تحقّق من الاستخدام والفوترة قبل إعادة المحاولة. |
| 413 | حجم الطلب كبير جدًا | قلّل حجم الطلب أو ارفع مجموعات أصغر من الموترات. |
| 422 | فشل التحقق | تحقّق من أنواع الحقول ومخطط الطلب. |
| 429 | تجاوز حد معدل الطلبات | قلّل تواتر الطلبات واستخدم تأخيرًا متزايدًا للمحاولات. |
| 500 | خطأ داخلي في الخدمة | حدّد عدد المحاولات واتصل بالدعم إذا استمر الخطأ. |
| 502 | خطأ في خدمة خارجية | انتظر ثم أعد المحاولة بعدد محاولات محدود. |
| 504 | انتهت مهلة الطلب | استخدم سير العمل غير المتزامن أو مدخلًا أصغر، وتحقّق من حالة المهمة قبل إعادة إرسالها. |
حدود معدل الطلبات
لكل مفتاح API حد مستقل للطلبات في الثانية يُحدّد عند إنشائه. يؤدي تجاوزه إلى HTTP 429.