最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

python之chroma向量數(shù)據(jù)庫(kù)安裝方式

 更新時(shí)間:2026年01月22日 08:36:47   作者:像風(fēng)一樣的男人@  
Chroma支持四種距離函數(shù)配置,包括歐氏距離、余弦距離、內(nèi)積和曼哈頓距離,在人臉比對(duì)場(chǎng)景中,余弦距離是最優(yōu)選擇

環(huán)境

# python3.10.3
chromadb==1.0.4

服務(wù)方式啟動(dòng)

# 直接使用 chroma 命令啟動(dòng)(推薦,因?yàn)榄h(huán)境變量已包含 bin 目錄)
chroma run --host 0.0.0.0 --port 8000 --path ./chroma_data

# 或使用完整路徑啟動(dòng)(適用于未激活環(huán)境時(shí))
/home/your_username/miniconda3/envs/chroma-env/bin/chroma run --host 0.0.0.0 --port 8000

連接本地文件模式(無(wú)需啟動(dòng)服務(wù)器)

import chromadb
from chromadb.config import Settings

# 1. 初始化本地文件模式的 Chroma 客戶(hù)端
# 數(shù)據(jù)會(huì)存儲(chǔ)在 ./chroma_local_data 目錄
client = chromadb.Client(
    Settings(
        persist_directory="./chroma_local_data",  # 本地?cái)?shù)據(jù)存儲(chǔ)路徑
        anonymized_telemetry=False  # 關(guān)閉匿名統(tǒng)計(jì)
    )
)

# 2. 創(chuàng)建或獲取一個(gè)集合(Collection)
# 集合是 Chroma 中存儲(chǔ)向量的容器
collection = client.get_or_create_collection(
    name="local_demo_collection",
    metadata={"description": "本地文件模式測(cè)試集合"}  # 可選:添加集合描述
)

# 3. 向集合中添加數(shù)據(jù)
# 包含:文檔(原始文本)、元數(shù)據(jù)(附加信息)、唯一ID、向量(可選,不提供則自動(dòng)生成)
collection.add(
    documents=[
        "Python 是一種解釋型編程語(yǔ)言",
        "Chroma 是一個(gè)輕量級(jí)向量數(shù)據(jù)庫(kù)",
        "向量數(shù)據(jù)庫(kù)常用于存儲(chǔ)和檢索嵌入向量"
    ],
    metadatas=[
        {"category": "programming"},
        {"category": "database"},
        {"category": "ai"}
    ],
    ids=["doc1", "doc2", "doc3"]  # 每個(gè)文檔的唯一ID
)

# 4. 持久化數(shù)據(jù)(本地模式需要手動(dòng)觸發(fā),確保數(shù)據(jù)寫(xiě)入磁盤(pán))
client.persist()

# 5. 檢索相似內(nèi)容
# 用查詢(xún)文本檢索最相似的2個(gè)文檔(Chroma 會(huì)自動(dòng)生成查詢(xún)文本的向量)
results = collection.query(
    query_texts=["什么是向量數(shù)據(jù)庫(kù)?"],  # 查詢(xún)文本
    n_results=2  # 返回Top 2相似結(jié)果
)

# 打印檢索結(jié)果
print("本地文件模式檢索結(jié)果:")
for i, doc in enumerate(results["documents"][0]):
    print(f"\n相似文檔 {i+1}:{doc}")
    print(f"相似度分?jǐn)?shù):{results['distances'][0][i]}")  # 分?jǐn)?shù)越低越相似
    print(f"元數(shù)據(jù):{results['metadatas'][0][i]}")

通過(guò)端口連接(客戶(hù)端 - 服務(wù)器模式)

import chromadb
from chromadb.config import Settings

# 1. 連接到遠(yuǎn)程/本地服務(wù)器
client = chromadb.HttpClient(
    host="localhost",  # 服務(wù)器IP(本地為localhost,遠(yuǎn)程填服務(wù)器IP)
    port=8000,         # 服務(wù)器端口(與啟動(dòng)時(shí)一致)
    settings=Settings(
        anonymized_telemetry=False
    )
)

# 2. 創(chuàng)建或獲取集合(與本地模式API一致)
collection = client.get_or_create_collection(
    name="server_demo_collection",
    metadata={"description": "服務(wù)器模式測(cè)試集合"}
)

# 3. 添加數(shù)據(jù)(API與本地模式一致)
collection.add(
    documents=[
        "北京是中國(guó)的首都",
        "巴黎是法國(guó)的首都",
        "東京是日本的首都"
    ],
    metadatas=[
        {"country": "中國(guó)"},
        {"country": "法國(guó)"},
        {"country": "日本"}
    ],
    ids=["city1", "city2", "city3"]
)

# 4. 檢索相似內(nèi)容
results = collection.query(
    query_texts=["哪些城市是國(guó)家首都?"],
    n_results=3
)

# 打印檢索結(jié)果
print("\n服務(wù)器模式檢索結(jié)果:")
for i, doc in enumerate(results["documents"][0]):
    print(f"\n相似文檔 {i+1}:{doc}")
    print(f"相似度分?jǐn)?shù):{results['distances'][0][i]}")
    print(f"元數(shù)據(jù):{results['metadatas'][0][i]}")

創(chuàng)建連接

chroma_client = chromadb.HttpClient(  # 創(chuàng)建連接
            host=CHROMA_HOST, # IP
            port=CHROMA_PORT, # 端口
            settings=Settings(
                anonymized_telemetry=False  # 關(guān)閉自動(dòng)上報(bào)
            )
        )


face_collection = chroma_client.get_or_create_collection(
            name=FACE_TABEL_NAME,  # 庫(kù)名
            metadata={"description": "人臉向量和id",  # 庫(kù)的描述
                      "hnsw:space": "cosine"}  # 指定距離函數(shù)為余弦距離
        )  # 指向人臉庫(kù)

調(diào)用 query 方法時(shí),distances 字段的含義和范圍因距離函數(shù)而異:

  • l2”:返回歐氏距離,范圍 [0, +∞),值越小越相似。
  • cosine”:返回余弦距離,范圍 [0, 2],值越小越相似(0 代表完全匹配)。
  • ip”:返回內(nèi)積,范圍 [-1, 1](未歸一化)或 [0, 1](歸一化后),值越大越相似。
  • l1”:返回曼哈頓距離,范圍 [0, +∞),值越小越相似。

總結(jié):

  • Chroma 支持 4 種距離函數(shù)配置,核心通過(guò) hnsw:space 指定。
  • 人臉比對(duì)場(chǎng)景,“cosine” 是最優(yōu)選擇,其次是 “ip”(歸一化后等價(jià)),避免使用默認(rèn)的 “l2”(歐氏距離)或 “l1”(曼哈頓距離)。

新增數(shù)據(jù)(修改數(shù)據(jù))

face_vector = face.embedding.tolist()  # 人臉向量數(shù)據(jù)

metadata = {
            "face_id": face_id,  # id
            "people_type": people_type,  # 人員類(lèi)別
        }
try:
    face_collection.add(
        ids=[face_id],  # 用傳入的 face_id 作為唯一標(biāo)識(shí)
        embeddings=[face_vector],  # 新向量(存在則覆蓋)
        metadatas=[metadata]  # 新元數(shù)據(jù)(存在則覆蓋)
     )
            
 except Exception as e:
     pass

根據(jù)id查數(shù)據(jù)

face_collection.get(ids=['21121'], include=["embeddings", 'metadatas'])  # 不指定不返回向量數(shù)據(jù)
# all_data = r.face_collection.get() 不指定就是查詢(xún)?nèi)?

根據(jù)id刪除數(shù)據(jù)

all_data = r.face_collection.get(include=[])  # include=[] 表示只返回 ids 查全部數(shù)據(jù)
all_ids = all_data["ids"]
r.face_collection.delete(ids=all_ids)

刪除庫(kù)(集合)

r.chroma_client.delete_collection(name='face')  

查詢(xún)?nèi)考?/h2>
collections = r.chroma_client.list_collections()
for coll in collections:
    print(f'集合名:{coll.name}')
    print(f'描述(元數(shù)據(jù)):{coll.metadata} ')

r.chroma_client.get_collection('face').metadata #查詢(xún)單個(gè)集合

元數(shù)據(jù)查詢(xún)

# 1. 查詢(xún)?cè)獢?shù)據(jù)中 people_type=0(訪客)的所有記錄
result = face_collection.get(
    where={"people_type": 0},  # 元數(shù)據(jù)過(guò)濾條件
    include=["ids", "metadatas", "embeddings"]  # 指定返回的內(nèi)容(可選)
)

# 返回結(jié)果解析
print("符合條件的ID:", result["ids"])  # 子ID列表,如["1_aug0", "2_front"]
print("符合條件的元數(shù)據(jù):", result["metadatas"])  # 對(duì)應(yīng)的元數(shù)據(jù)列表
print("符合條件的向量:", result["embeddings"])  # 對(duì)應(yīng)的向量列表(若include包含)

where 參數(shù)支持多種條件,滿(mǎn)足復(fù)雜查詢(xún)需求:

  • 等于(==):
# 查詢(xún) main_face_id="user_001" 的所有記錄
face_collection.get(where={"main_face_id": "user_001"})
  • 不等于(!=):
# 查詢(xún) people_type 不是員工(!=1)的記錄
face_collection.get(where={"people_type": {"$ne": 1}})
  • 范圍查詢(xún)(>/</>=/<=):
# 查詢(xún)自定義數(shù)值型元數(shù)據(jù)(如 score)大于0.8的記錄
face_collection.get(where={"score": {"$gt": 0.8}})
  • 包含(in):
# 查詢(xún) pose_type 是正面或側(cè)面的記錄
face_collection.get(where={"pose_type": {"$in": ["front", "left_side"]}})

總結(jié)

以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • Python如何獲取響應(yīng)體response body

    Python如何獲取響應(yīng)體response body

    在Python中,我們可以使用多個(gè)庫(kù)來(lái)發(fā)送HTTP請(qǐng)求并獲取響應(yīng)體(response body),其中requests就是最常用的庫(kù)之一,下面我們就來(lái)看看如何利用requests發(fā)送HTTP GET請(qǐng)求,并獲取響應(yīng)體吧
    2024-11-11
  • Python3按一定數(shù)據(jù)位數(shù)格式處理bin文件的方法

    Python3按一定數(shù)據(jù)位數(shù)格式處理bin文件的方法

    今天小編就為大家分享一篇Python3按一定數(shù)據(jù)位數(shù)格式處理bin文件的方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2019-01-01
  • Numpy中vstack()和hstack()的使用方式

    Numpy中vstack()和hstack()的使用方式

    文章詳細(xì)介紹了Numpy中vstack()和hstack()兩種數(shù)組拼接方法,vstack()是垂直堆疊數(shù)組,需保證除第一軸(行)外,數(shù)組形狀相同,hstack()是按順序堆疊數(shù)組,需保證除第二軸(列)外,數(shù)組形狀相同,兩者都可通過(guò)堆疊給定數(shù)組最后形成至少二維的數(shù)組
    2024-10-10
  • Python腳本生成exe的實(shí)用指南

    Python腳本生成exe的實(shí)用指南

    本文介紹了使用PyInstaller將Python腳本打包成.exe文件的簡(jiǎn)單方法,并提供了從準(zhǔn)備工作到具體命令的一系列指導(dǎo),包括如何安裝PyInstaller、基礎(chǔ)打包命令、修改輸出目錄、改變.exe文件名、隱藏黑窗口等實(shí)用技巧,需要的朋友可以參考下
    2026-04-04
  • python中os.environ基本介紹及使用方法

    python中os.environ基本介紹及使用方法

    os.environ是Python中的一個(gè)字典對(duì)象,它包含了當(dāng)前進(jìn)程的環(huán)境變量,通過(guò)使用os.environ,可以獲取和設(shè)置環(huán)境變量的值,這篇文章主要介紹了python中os.environ基本介紹及使用方法,需要的朋友可以參考下
    2023-08-08
  • python matlibplot繪制多條曲線圖

    python matlibplot繪制多條曲線圖

    這篇文章主要為大家詳細(xì)介紹了python matlibplot繪制多條曲線圖,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2018-07-07
  • Python數(shù)據(jù)分析之雙色球統(tǒng)計(jì)兩個(gè)紅和藍(lán)球哪組合比例高的方法

    Python數(shù)據(jù)分析之雙色球統(tǒng)計(jì)兩個(gè)紅和藍(lán)球哪組合比例高的方法

    這篇文章主要介紹了Python數(shù)據(jù)分析之雙色球統(tǒng)計(jì)兩個(gè)紅和藍(lán)球哪組合比例高的方法,涉及Python數(shù)值運(yùn)算及圖形繪制相關(guān)操作技巧,需要的朋友可以參考下
    2018-02-02
  • pygame實(shí)現(xiàn)俄羅斯方塊游戲(AI篇2)

    pygame實(shí)現(xiàn)俄羅斯方塊游戲(AI篇2)

    這篇文章主要為大家詳細(xì)介紹了pygame實(shí)現(xiàn)俄羅斯方塊游戲AI的第2篇,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2019-10-10
  • python 處理pdf加密文件的操作代碼

    python 處理pdf加密文件的操作代碼

    這篇文章主要介紹了python 處理pdf加密文件的操作代碼,本文通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友參考下吧
    2024-01-01
  • 如何通過(guò)python實(shí)現(xiàn)全排列

    如何通過(guò)python實(shí)現(xiàn)全排列

    這篇文章主要介紹了如何通過(guò)python實(shí)現(xiàn)全排列,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-02-02

最新評(píng)論

蛟河市| 南昌市| 饶阳县| 平利县| 天长市| 华宁县| 施秉县| 昌乐县| 鹿邑县| 山西省| 博乐市| 洮南市| 色达县| 彭山县| 崇信县| 佳木斯市| 临潭县| 博爱县| 镇远县| 遵义市| 麻城市| 湘潭市| 炎陵县| 韶关市| 兴和县| 勐海县| 丹棱县| 高邮市| 章丘市| 邳州市| 会宁县| 板桥市| 西畴县| 孝义市| 德格县| 石柱| 昆山市| 内江市| 沙河市| 华宁县| 无极县|