حزم SDK

مسار عملك. نماذجنا.

أمثلة Python وJavaScript للمعالجة المحلية المسبقة والمهام غير المتزامنة والفيديوهات المستضافة.

تحتفظ الشيفرة ومعرّفات API وقيم الطلبات بلغتها التقنية الأصلية.

أدوات مفتوحة المصدر / Shot Detection

ابدأ بتحديد حدود اللقطات.

Shot Detection أداة Python مستقلة لتقسيم الفيديو إلى لقطات ذات توقيت بداية ونهاية. استخدمها مع Seeknetic SDK لإنشاء سير عمل لمعالجة كل لقطة.

  1. 01

    تحديد حدود اللقطات

    حلّل الفيديو للحصول على توقيت بداية كل لقطة ونهايتها.

  2. 02

    ترميز اللقطات أو وسمها

    مرّر النطاق الزمني لكل لقطة إلى المعالجة المحلية المسبقة في SDK، ثم أرسل مهمة ترميز أو وسم.

  3. 03

    إنشاء البحث

    احفظ المتجهات والبيانات الوصفية في تطبيقك، مع ربط كل نتيجة بالملف الأصلي وتوقيته.

تحدّد Shot Detection حدود اللقطات. يتطلب الترميز والوسم تثبيت Seeknetic SDK بشكل منفصل وإتاحة API، وتُطبّق أسعار API المنشورة.

التثبيت
pip install seeknetic

ثبّت ffmpeg أولاً وتأكد من وجود ffmpeg وffprobe في PATH.

البدء السريع

التثبيت وأول طلب لتضمين النص.

التثبيت من PyPI

bash
pip install seeknetic

تضمين النص

استخدم عميل Python المتزامن للطلب الأول، ثم انتقل إلى غير المتزامن إذا احتجت إلى تنفيذ متوازٍ أكثر.

python
import os
from seeknetic import Seeknetic

client = Seeknetic(
    api_key=os.environ["SEEKNETIC_API_KEY"],
)

response = client.video_embedding.encode_text(
    text="a person walking on the beach"
)

print(len(response.embedding))

مسارات الفيديو المحلي

موصى به للملفات المحلية. ثبّت ffmpeg قبل استخدام preprocess_and_upload(...).

يبقى الفيديو الأصلي محلياً. يرفع هذا المسار الموترات المعالجة مسبقاً فقط. استخدم service="embedding" مع video_embedding.encode_video.submit_async(...) وservice="tagging" مع video_tagging.submit_async_job(...).

التضمين · الخطوة ١ · المعالجة المسبقة والرفع

python
import os
from seeknetic import Seeknetic

client = Seeknetic(api_key=os.environ["SEEKNETIC_API_KEY"])

upload = client.preprocess_and_upload(
    video_path="sample.mp4",
    service="embedding",
    request_id="emb-task-0001",
    start_ms=0,
    end_ms=10_000,
)

print(upload.request_id)
print(upload.r2_keys)

التضمين · الخطوة ٢ · إرسال مهمة غير متزامنة

python
import os
from seeknetic import Seeknetic

client = Seeknetic(api_key=os.environ["SEEKNETIC_API_KEY"])

upload = client.preprocess_and_upload(
    video_path="sample.mp4",
    service="embedding",
    request_id="emb-task-0001",
)

job = client.video_embedding.encode_video.submit_async(
    tensor={
        "video_input_key": upload.r2_keys["video_input"],
        "audio_input_key": upload.r2_keys["audio_input"],
    },
    request_id=upload.request_id,
)

print(job.request_id, job.status)

التضمين · الخطوة ٣ · الاستعلام عن النتيجة

python
import os
from seeknetic import Seeknetic

client = Seeknetic(api_key=os.environ["SEEKNETIC_API_KEY"])

status = client.async_status.retrieve("emb-task-0001")

print(status.status)
print(status.embedding)

الوسوم · الخطوة ١ · المعالجة المسبقة والرفع

python
import os
from seeknetic import Seeknetic

client = Seeknetic(api_key=os.environ["SEEKNETIC_API_KEY"])

upload = client.preprocess_and_upload(
    video_path="sample.mp4",
    service="tagging",
    request_id="tag-task-0001",
    start_ms=0,
    end_ms=10_000,
)

print(upload.request_id)
print(upload.r2_keys)

الوسوم · الخطوة ٢ · إرسال مهمة غير متزامنة

python
import os
from seeknetic import Seeknetic

client = Seeknetic(api_key=os.environ["SEEKNETIC_API_KEY"])

upload = client.preprocess_and_upload(
    video_path="sample.mp4",
    service="tagging",
    request_id="tag-task-0001",
)

job = client.video_tagging.submit_async_job(
    tensor={
        "video_input_key": upload.r2_keys["video_input"],
        "video_kwargs_key": upload.r2_keys["video_kwargs"],
    },
    request_id=upload.request_id,
)

print(job.request_id, job.status)

الوسوم · الخطوة ٣ · الاستعلام عن النتيجة

python
import os
from seeknetic import Seeknetic

client = Seeknetic(api_key=os.environ["SEEKNETIC_API_KEY"])

status = client.async_status.retrieve("tag-task-0001")

print(status.status)
print(status.tags)

مسارات الفيديو المرفوع أو المستضاف

أرسل video_url مباشرة عندما لا تحتاج إلى معالجة محلية مسبقة.

التضمين · الخطوة ١ · إرسال video_url

python
import os
from seeknetic import Seeknetic

client = Seeknetic(api_key=os.environ["SEEKNETIC_API_KEY"])

job = client.video_embedding.encode_video.submit_async(
    video_url="https://example.com/video.mp4",
)

print(job.request_id, job.status)

التضمين · الخطوة ٢ · الاستعلام عن النتيجة

python
import os
from seeknetic import Seeknetic

client = Seeknetic(api_key=os.environ["SEEKNETIC_API_KEY"])

status = client.async_status.retrieve("emb-task-0001")

print(status.status)
print(status.embedding)

الوسوم · الخطوة ١ · إرسال video_url

python
import os
from seeknetic import Seeknetic

client = Seeknetic(api_key=os.environ["SEEKNETIC_API_KEY"])

job = client.video_tagging.submit_async_job(
    video_url="https://example.com/video.mp4",
)

print(job.request_id, job.status)

الوسوم · الخطوة ٢ · الاستعلام عن النتيجة

python
import os
from seeknetic import Seeknetic

client = Seeknetic(api_key=os.environ["SEEKNETIC_API_KEY"])

status = client.async_status.retrieve("tag-task-0001")

print(status.status)
print(status.tags)

العميل غير المتزامن

يوثّق README أيضاً دعم aiohttp لزيادة التنفيذ المتوازي.

تثبيت إضافة aiohttp

bash
pip install seeknetic[aiohttp]

استخدام AsyncSeeknetic مع DefaultAioHttpClient

python
import os
import asyncio
from seeknetic import DefaultAioHttpClient
from seeknetic import AsyncSeeknetic


async def main() -> None:
    async with AsyncSeeknetic(
        api_key=os.environ.get("SEEKNETIC_API_KEY"),
        http_client=DefaultAioHttpClient(),
    ) as client:
        response = await client.video_embedding.encode_text(
            text="a person walking on the beach"
        )
        print(len(response.embedding))


asyncio.run(main())
التثبيت
npm install seeknetic

ثبّت ffmpeg أولاً وتأكد من وجود ffmpeg وffprobe في PATH.

البدء السريع

التثبيت وأبسط مثال لتضمين النص من README.

التثبيت من npm

bash
npm install seeknetic

تضمين النص

javascript
import Seeknetic from 'seeknetic';

const client = new Seeknetic({
  apiKey: process.env['SEEKNETIC_API_KEY'],
});

const response = await client.videoEmbedding.encodeText({
  text: 'a person walking on the beach',
});

console.log(response.embedding.length);

مسارات الفيديو المحلي

موصى به للملفات المحلية. ثبّت ffmpeg قبل استخدام preprocessAndUpload(...).

يبقى الفيديو الأصلي محلياً. يرفع هذا المسار الموترات المعالجة مسبقاً فقط. يُستخدم service: "embedding" مع videoEmbedding.encodeVideo.submitAsync(...) وservice: "tagging" مع videoTagging.submitAsyncJob(...).

التضمين · الخطوة ١ · المعالجة المسبقة والرفع

typescript
import Seeknetic from 'seeknetic';

const client = new Seeknetic({
  apiKey: process.env['SEEKNETIC_API_KEY'],
});

const upload = await client.preprocessAndUpload({
  videoPath: 'sample.mp4',
  service: 'embedding',
  requestId: 'emb-task-0001',
  startMs: 0,
  endMs: 10_000,
});

console.log(upload.request_id);
console.log(upload.r2_keys);

التضمين · الخطوة ٢ · إرسال مهمة غير متزامنة

typescript
import Seeknetic from 'seeknetic';

const client = new Seeknetic({
  apiKey: process.env['SEEKNETIC_API_KEY'],
});

const upload = await client.preprocessAndUpload({
  videoPath: 'sample.mp4',
  service: 'embedding',
  requestId: 'emb-task-0001',
});

const job = await client.videoEmbedding.encodeVideo.submitAsync({
  tensor: {
    video_input_key: upload.r2_keys['video_input'],
    audio_input_key: upload.r2_keys['audio_input'],
  },
  request_id: upload.request_id,
});

console.log(job.request_id, job.status);

التضمين · الخطوة ٣ · الاستعلام عن النتيجة

typescript
import Seeknetic from 'seeknetic';

const client = new Seeknetic({
  apiKey: process.env['SEEKNETIC_API_KEY'],
});

const status = await client.asyncStatus.retrieve('emb-task-0001');

console.log(status.status);
console.log(status.embedding);

الوسوم · الخطوة ١ · المعالجة المسبقة والرفع

typescript
import Seeknetic from 'seeknetic';

const client = new Seeknetic({
  apiKey: process.env['SEEKNETIC_API_KEY'],
});

const upload = await client.preprocessAndUpload({
  videoPath: 'sample.mp4',
  service: 'tagging',
  requestId: 'tag-task-0001',
  startMs: 0,
  endMs: 10_000,
});

console.log(upload.request_id);
console.log(upload.r2_keys);

الوسوم · الخطوة ٢ · إرسال مهمة غير متزامنة

typescript
import Seeknetic from 'seeknetic';

const client = new Seeknetic({
  apiKey: process.env['SEEKNETIC_API_KEY'],
});

const upload = await client.preprocessAndUpload({
  videoPath: 'sample.mp4',
  service: 'tagging',
  requestId: 'tag-task-0001',
});

const job = await client.videoTagging.submitAsyncJob({
  tensor: {
    video_input_key: upload.r2_keys['video_input'],
    video_kwargs_key: upload.r2_keys['video_kwargs'],
  },
  request_id: upload.request_id,
});

console.log(job.request_id, job.status);

الوسوم · الخطوة ٣ · الاستعلام عن النتيجة

typescript
import Seeknetic from 'seeknetic';

const client = new Seeknetic({
  apiKey: process.env['SEEKNETIC_API_KEY'],
});

const status = await client.asyncStatus.retrieve('tag-task-0001');

console.log(status.status);
console.log(status.tags);

مسارات الفيديو المرفوع أو المستضاف

أرسل video_url مباشرة عندما لا تحتاج إلى معالجة محلية مسبقة.

التضمين · الخطوة ١ · إرسال video_url

typescript
import Seeknetic from 'seeknetic';

const client = new Seeknetic({
  apiKey: process.env['SEEKNETIC_API_KEY'],
});

const job = await client.videoEmbedding.encodeVideo.submitAsync({
  video_url: 'https://example.com/video.mp4',
});

console.log(job.request_id, job.status);

التضمين · الخطوة ٢ · الاستعلام عن النتيجة

typescript
import Seeknetic from 'seeknetic';

const client = new Seeknetic({
  apiKey: process.env['SEEKNETIC_API_KEY'],
});

const status = await client.asyncStatus.retrieve('emb-task-0001');

console.log(status.status);
console.log(status.embedding);

الوسوم · الخطوة ١ · إرسال video_url

typescript
import Seeknetic from 'seeknetic';

const client = new Seeknetic({
  apiKey: process.env['SEEKNETIC_API_KEY'],
});

const job = await client.videoTagging.submitAsyncJob({
  video_url: 'https://example.com/video.mp4',
});

console.log(job.request_id, job.status);

الوسوم · الخطوة ٢ · الاستعلام عن النتيجة

typescript
import Seeknetic from 'seeknetic';

const client = new Seeknetic({
  apiKey: process.env['SEEKNETIC_API_KEY'],
});

const status = await client.asyncStatus.retrieve('tag-task-0001');

console.log(status.status);
console.log(status.tags);