Multi-modal işleme natif olarak desteklenir - aynı programlama modeli ile hem metin hem de görüntü işleyebilir ve aynı kullanıcı akışında gözlemleyebilir. ) için CocoIndex Hakkında CocoInsight Hakkında CocoIndex Hakkında CocoInsight Hakkında Bu blogda, CocoIndex'i kullanarak ölçeklenebilir bir yüz tanıma boru hattı oluşturmanın kapsamlı bir örneğinden geçeceğiz. resimlerden yüzler nasıl çıkarılır ve yerleştirilir, verileri ilişkisel olarak yapılandırır ve her şeyi gerçek zamanlı sorgulama için bir vektor veritabanına aktarırız. Şimdi sınır kutuları temelinde bir görüntü tanımlanmış bölümlerini görselleştirebilir ve AI çıkarmalarını anlamak ve değerlendirmek daha kolay hale getirir - yapılandırılmamış görsel verilerin bağlamında hesaplanmış özellikleri kesintisiz bir şekilde ekleyebilir. CocoInsight Hakkında CocoInsight Hakkında If you find this tutorial helpful, we’d greatly appreciate it if you could ⭐ star . CocoIndex on GitHub CocoIndex GitHub’da Cases Kullanımı Fotoğraf Arama Face-based erişim kontrolü ve gözetimi Görsel deduplikasyon ve kimlik algılama İnsanları veya yüz kimliğini içeren multimodal arama Fotoğraflardan oluşan sosyal grafik analizi Ne elde edeceğiz Bu konferansın katılımcılarının fotoğrafları bazen , dünyanın önde gelen fizikçilerini bir araya topladığı resimlerinden dolayı ( ) “Hiç çekilmiş en akıllı resim” Wikipedia Hakkında İşte ulaşmak istediğimiz şey: Resimdeki tüm yüzleri tespit edin ve sınır kutularını çıkarın Her bir yüz resmini 128 boyutlu bir yüz karışımı haline getirin ve kodlayın Metadata ve vektörleri yapılandırılmış bir indekse saklayın: “Bu kişiyi içeren tüm resimler bul” veya “Bu kişiyi içeren resimler ara” gibi sorguları desteklemek için. Tüm kodları bulabilirsiniz . burda indeksleme flow Bir resim listesi hazırladık. 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. Temel bileşenler Görüntü Injection bir gözlem yapıyoruz Bu uygulama ile built-in Tüm yeni eklenen dosyalar otomatik olarak işlenir ve indekslenir. 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), ) Böylece bir masa oluşturulur. ve alanı filename content Sen onunla bağlanabilirsin SQS entegrasyonu ile birlikte, ) veya . S3 Çubukları Örnek Azure Blob Mağazası Yüzleri Keşfetmek ve Çekmek Biz kullanıyoruz bu dlib'in CNN tabanlı yüz dedektörü tarafından desteklenen kapak altında bir kütüphane. model büyük resimlerde yavaş olduğundan, algılamadan önce geniş resimleri küçültüyoruz. 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ü içeriğini dönüştürüyoruz: with data_scope["images"].row() as image: image["faces"] = image["content"].transform(extract_faces) Bu adımdan sonra, her görüntü tespit edilen yüzlerin ve sınır kutularının bir listesi vardır. Keşfedilen her yüz orijinal görüntüden kesilir ve bir PNG olarak depolanır. Örnek Ekstraksiyonu : Örnek Ekstraksiyonu : Face Embeddings Bilgisayarları Aynı kütüphaneyi kullanarak her kesilen yüzü kodluyoruz.Bu, her yüz için 128 boyutlu bir vektor temsilini oluşturur. @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 Akışa ekleme fonksiyonunu ekliyoruz: with image["faces"].row() as face: face["embedding"] = face["image"].transform(extract_face_embedding) Bu adımdan sonra, indekslenmeye hazır eklentilerimiz var! Toplama ve ihracat embeddings Şimdi her yüz için yapılandırılmış verileri topluyoruz: dosya adı, sınır kutusu ve ekleme. face_embeddings = data_scope.add_collector() face_embeddings.collect( id=cocoindex.GeneratedField.UUID, filename=image["filename"], rect=face["rect"], embedding=face["embedding"], ) Bir Qdrant koleksiyonuna ihraç ediyoruz: face_embeddings.export( QDRANT_COLLECTION, cocoindex.targets.Qdrant( collection_name=QDRANT_COLLECTION ), primary_key_fields=["id"], ) Şimdi, yüz vektörleri üzerinde cosine benzerlik sorgularını çalıştırabilirsiniz. CocoIndex, diğer vektor veritabanları gibi 1-line switch'leri desteklemektedir. . Postsözleri indekse ihtiyacım var Artık yüz arama uygulamaları veya panolar oluşturabilirsiniz. örneğin: Yeni bir yüz eklemeye göre, en benzer yüzleri bulun Bir dizi fotoğrafta görünen tüm yüz resimleri bulun Görsel olarak benzer kişileri gruplandırmak için Cluster embeddings to group visually similar people Sürücüleri incelemek için, check out . Fotoğraf Arama Projesi Görüntü karşılaştırması ile sorgu yolunda tam bir örnek görmek istiyorsanız, ona bir çığlık atın . Bizim Grup Bizi destekleyin Sürekli daha fazla örnek ekliyoruz ve çalıştırma süremizi geliştiriyoruz. eğer bu işe yarayacak bulduysanız, lütfen ⭐ yıldız Onu başkalarıyla paylaşın. CocoIndex GitHub’da Okuduğunuz için teşekkürler! Hangi boru hattını inşa ettiğinizi bilelim - onları sunmak isteriz.