Multi-modal işləməyi nativ olaraq dəstəkləyir - o, texti və görüntüləri aynı programlama modeli ilə işləyə bilər və aynı istifadəçi aksiyasında gözləyir. İŞİD CoCoIndex haqqında Kokosavt CoCoIndex haqqında Kokosavt Bu blogda, CocoIndex-i istifadə edən genişlənən bir yüz tanıma pipeinin qurulmasının bütünlüklü bir nümunəsi ilə gedəcəyik.İllərdən yüzləri necə çıxartmaq və daxil etmək, verileri relasional olaraq strukturlandırmaq və hər şeyi real-time sorğu üçün vektor bazasına çıxartmaq üçün göstərəcəyik. Artıq bir görüntünün tanımlanan bölmələri limit kutularına görə görüntüleyə bilər və AI ekstraksiyalarının anlayışını və qiymətləndirilməsini asanlaşdırır - strukturlanmamış vizual məlumatların kontekstində kompüterli xüsusiyyətlər düzgün birləşdirir. Kokosavt Kokosavt If you find this tutorial helpful, we’d greatly appreciate it if you could ⭐ star . CocoIndex on GitHub GitHub saytında Casuslar istifadə Fotoşəkillər Face-based Access Control və Surveillance Vizual deduplikasiya və identiteti araşdırma İnsanları və ya faciə identiteti ilə bağlı multimodal arama Fotoların sosial grafik analizi Biz nə edəcəyik Konqresdə iştirak edənlərin fotoşəkilləri bir neçə dəfə oxunub. “Dünyanın ən məşhur fiziki şagirdləri” ( ) “Hər zaman çəkilən ən smart foto” Vikipediya Bu, bizə nə etmək istəyir: Görüntüdəki bütün yüzləri tespit edin və onların sınırlayıcı kutularını çıxartın Ümumiyyətlə, hər bir obrazın 128-dimensional görünüşü var. Metadata və vektorları strukturlu indeksdə saxlayın: “Bu kişiyə bənzər bütün yüzləri bul” və ya “Bu kişiyə bənzər görüntüləri axtar” Bütün kodları təqdim edə bilərsiniz . Burada Indeksiya Flow Görüntülərin bir listasını hazırlayırıq. For each image, we: Extract faces from the image. Compute embeddings for each face. We export the following fields to a table in Postgres with PGVector: Filename, rect, embedding for each face. Core komponentləri Görüntülər ingestion Biz bir İnşaatın yaradılması ilə bağlı Bütün yeni yüklənmiş dosyalar automatik olaraq işlənir və indeksləşdirilir. images/ LocalFile python CopyEdit @cocoindex.flow_def(name="FaceRecognition") def face_recognition_flow(flow_builder, data_scope): data_scope["images"] = flow_builder.add_source( cocoindex.sources.LocalFile(path="images", binary=True), refresh_interval=datetime.timedelta(seconds=10), ) Bu, bir masanın və Şirkətlər filename content Onu özünüzə bağlayabilirsiniz. SQS integrasiyası ilə və ya . S3 Şəkillər Əksinə Azure Blob xəritədə Görüntüləri çəkmək və izləmək Biz bu “Dublin” şirkəti “Dublin” şirkəti “Dublin” şirkəti “Dublin” şirkəti “Dublin” şirkəti “Dublin” şirkəti “Dublin” şirkəti “Dublin” şirkəti “Dublin” şirkəti “Dublin” şirkəti “Dublin” şirkəti “Dublin” şirkəti “Dublin” şirkəti “Dublin” şirkəti “Dublin” şirkəti “Dublin” şirkəti “Dublin” şirkəti “Dublin” şirkəti “Dublin” şirkəti “Dublin” şirkəti “Dublin” şirkəti “Dublin” şirkəti “Dublin” şirkəti “Dublin” şirkəti “Dublin” şirkəti “Dublin” şirkəti “Dublin” şirkəti “Dublin” şirkəti “D face_recognition @cocoindex.op.function( cache=True, behavior_version=1, gpu=True, arg_relationship=(cocoindex.op.ArgRelationship.RECTS_BASE_IMAGE, "content"), ) def extract_faces(content: bytes) -> list[FaceBase]: orig_img = Image.open(io.BytesIO(content)).convert("RGB") # The model is too slow on large images, so we resize them if too large. if orig_img.width > MAX_IMAGE_WIDTH: ratio = orig_img.width * 1.0 / MAX_IMAGE_WIDTH img = orig_img.resize( (MAX_IMAGE_WIDTH, int(orig_img.height / ratio)), resample=Image.Resampling.BICUBIC, ) else: ratio = 1.0 img = orig_img # Extract face locations. locs = face_recognition.face_locations(np.array(img), model="cnn") faces: list[FaceBase] = [] for min_y, max_x, max_y, min_x in locs: rect = ImageRect( min_x=int(min_x * ratio), min_y=int(min_y * ratio), max_x=int(max_x * ratio), max_y=int(max_y * ratio), ) # Crop the face and save it as a PNG. buf = io.BytesIO() orig_img.crop((rect.min_x, rect.min_y, rect.max_x, rect.max_y)).save( buf, format="PNG" ) face = buf.getvalue() faces.append(FaceBase(rect, face)) return faces Görüntülərin içərisini dəyişir: with data_scope["images"].row() as image: image["faces"] = image["content"].transform(extract_faces) Bu adımdan sonra, hər bir görüntü tespit edilmiş yüzlərin və sınırlandırma kutularının bir listası vardır. Hər biri orijinal görüntülərdən çəkilir və PNG kimi saxlanır. Sample ekstraktı: Sample ekstraktı: Kompüterin yüzü Biz hər bir yüzü aynı kütləvi ilə kodlayırıq.Bu, hər bir yüzün 128-dimensional vektor representasiyasını yaratır. @cocoindex.op.function(cache=True, behavior_version=1, gpu=True) def extract_face_embedding( face: bytes, ) -> cocoindex.Vector[cocoindex.Float32, typing.Literal[128]]: """Extract the embedding of a face.""" img = Image.open(io.BytesIO(face)).convert("RGB") embedding = face_recognition.face_encodings( np.array(img), known_face_locations=[(0, img.width - 1, img.height - 1, 0)], )[0] return embedding Biz bu funksiyadan istifadə edirik: with image["faces"].row() as face: face["embedding"] = face["image"].transform(extract_face_embedding) Bu işdən sonra biz indekslənməyə hazırıq. Deputat və Eksportlar Artıq hər bir yüz üçün strukturlu məlumatları toplayırıq: filename, bounding box və embedding. face_embeddings = data_scope.add_collector() face_embeddings.collect( id=cocoindex.GeneratedField.UUID, filename=image["filename"], rect=face["rect"], embedding=face["embedding"], ) Biz bir Qdrant kolleksiyasına eksport edirik: face_embeddings.export( QDRANT_COLLECTION, cocoindex.targets.Qdrant( collection_name=QDRANT_COLLECTION ), primary_key_fields=["id"], ) Artıq kosinin bənzərliyi sorğuları yüz vektorları üzərində çalışdırabilirsiniz. CocoIndex 1-line switch kimi digər vektor databasları ilə dəstəkləyir . Postqərimlər İndi indekslər Artıq faciə arama apps və ya dashboards yaratmaq mümkündür. Yeni görünüşdə ən bənzər yüzləri görmək olar. Bütün fotolarda görünən görüntülər Görünüşə bənzər insanları dəstəkləmək üçün cluster embeddings Sürücülər üçün, check out . Image Search projektləri Görüntülərlə qarşılaşan sorğu yolunun tam bir nümunəsini görmək istəyirsinizsə, onu . Bizim qrupumuz Bizə kömək Biz həmişə daha çox nümunə ekləyirik və sürət vaxtımızı yaxşılaşdırırıq.Əgər bunu faydalı bulundursanız, lütfen Onu başqaları ilə paylaşıb. GitHub saytında Okuduğunuz üçün təşəkkür edirəm! Bəlkə də bizə bildirsinlər ki, nəyi planlaşdırırsınız, nəyi planlaşdırırsınız.