Афарызм (гр. aphorismos - выказванне) - выслоўе, у якім у трапнай, лаканічнай форме выказана значная і арыгінальная думка. ) Кокаіндэкс Кокавічы Кокаіндэкс Кокавічы У гэтым блогу мы будзем гуляць праз сусветны прыклад будаўніцтва скалабельнай трубкі прызнання асобы з выкарыстаннем CocoIndex. Мы паказаць вам, як выцягнуць і ўтрымліваць асобы з малюнкаў, структуруць дадзеныя рэальна, і экспартаваць усё ў векторную базу дадзеных для рэальнага часу запытаў. Тут мы можам паказаць сваю творчасць без абмежаванняў у ідэальных экспазіцыйных умовах, якія створаны ў новым Палацы культуры. Кокавічы Кокавічы If you find this tutorial helpful, we’d greatly appreciate it if you could ⭐ star . CocoIndex on GitHub CocoIndex на GitHub Выкарыстанне Case Фота пошуку Face-based Access Control і назіранне Візуальная дэдуплікацыя і выяўленне ідэнтыфікацыі Multimodal пошук, уключаючы людзей або асобы ідэнтыфікацыі Аналіз сацыяльных графаў з фота Што мы дасягнем Кнігадрукаванне адкрыла шырокі шлях для , за яго апісанне вядучых фізікаў свету, якія сабраліся разам ў адным выніку ( ) «Самая разумная карціна, якая была зроблена» Вікіпедыя Вось што мы хочам дасягнуць: Выяўленне усіх асобаў на здымку і вывучэнне іх межавых пакояў Выкарыстанне і кодыроўка кожнага малюнка ў 128-мернае ўбудовы Сцягнуць метаданныя і векторы ў структурыраваны індыкс для падтрымкі запытаў, такіх як: «Знайсці ўсе падобныя любімыя любімыя любімыя любімыя любімыя любімыя любімыя любімыя любімыя любімыя любімыя любімыя любімыя любімыя любімыя любімыя любімыя любімыя любімыя любімыя любімыя любімыя» Вы можаце знайсці поўны код . тут Індыкацыя Flow Мы выкладваем спіс фотаздымкаў. 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. Ключавыя компоненты Ілюстрацыя Injection Мы назіраем на Выкарыстанне ўбудаванага Усе новыя дадзеныя аўтаматычна апрацоўваюцца і індыкаваны. 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), ) Гэта значыць, што стол з і Паляўнічы filename content Вы можаце звязаць іх з вашым (з дапамогай SQS інтэграцыі, ) або . S3 Палітыка Прыклад Загрузіць Azure Blob Выяўленне і вывучэнне асобы Мы выкарыстоўваем Акрамя таго, для некаторых элементаў у экспазіцыі вядома нават імя майстра, які іх вырабіў – гэта знакаміты нямецкі даспешнік Кольман Хельмшміт, які выконваў заказы для каралеўскіх дамоў і найбуйнейшых магнатаў Еўропы. 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 Мы трансфармуем здымкі ў кантэнт: with data_scope["images"].row() as image: image["faces"] = image["content"].transform(extract_faces) Пасля гэтага кроку, у кожнага здымка ёсць спіс выяўленых асобаў і межавых пакояў. Кожнае выяўленае жыццё выкрадаецца з першапачатковага малюнка і захоўваецца як PNG. Выкарыстанне прыкладанняў: Выкарыстанне прыкладанняў: Вынікі пошуку - computace face embeddings Мы кодыруем кожнае вырабленыя асобы, выкарыстоўваючы тую ж бібліятэку. Гэта генеруе 128-мернае векторнае прадстаўленне на кожную асобу. @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 Мы ўключаем функцыю ўбудовы ў поток: with image["faces"].row() as face: face["embedding"] = face["image"].transform(extract_face_embedding) Пасля гэтага мы маем ўбудовы гатовыя да індэксацыі! Сцягнуць і экспартаваць аб'екты Цяпер мы збіраем структурованыя дадзеныя для кожнага облика: імя файла, мяжу пакоі і ўкладка. face_embeddings = data_scope.add_collector() face_embeddings.collect( id=cocoindex.GeneratedField.UUID, filename=image["filename"], rect=face["rect"], embedding=face["embedding"], ) Мы экспортуем у калекцыю Qdrant: face_embeddings.export( QDRANT_COLLECTION, cocoindex.targets.Qdrant( collection_name=QDRANT_COLLECTION ), primary_key_fields=["id"], ) Цяпер вы можаце запускаць запыты па падобнасці косіны над векторамі роду. CocoIndex падтрымлівае 1-line switch з іншымі вектарнымі базамі дадзеных, такімі як . Постаці Сцягнуць Індекс Цяпер вы можаце стварыць прыкладанні для пошуку фасадаў або табліцы. Напрыклад: З'яўляючыся новай асобай, знайдзіце найбольш падобныя асобы Знайсці усе малюнкі, якія з'яўляюцца ў наборы фота Кластарныя ўбудовы для групоўкі візуальна падобных людзей Для папярэдніх пытанняў, звярніцеся . Ілюстрацыйны пошук Калі вы хочаце падзяліцца сваёй думкай з майстрам, рабіце гэта максімальна ветліва. . Наша група Нас падтрымаюць Мы пастаянна дадаем больш прыкладаў і палепшаем наш працоўны час. Калі вы знайшлі гэта карысным, калі ласка ⭐ star І ўсё гэта з іншымі. CocoIndex на GitHub Дзякуй за чытаньне! Дайце нам ведаць, якія трубопроводы вы будзьце будаваць - мы б хацелі, каб ацаніць іх.