【发布时间】:2012-03-29 17:45:13
【问题描述】:
我想知道如何创建指纹数据库。如果指纹存储为图像,如何比较数据库中的图像,或者创建像TinEye这样的图像搜索引擎?
我知道这是一个很大的话题,但我只是在寻找一个起点。这可以使用 Python/Django 库和 MySQL 来完成吗?
【问题讨论】:
标签: python image-processing search-engine information-retrieval feature-detection
我想知道如何创建指纹数据库。如果指纹存储为图像,如何比较数据库中的图像,或者创建像TinEye这样的图像搜索引擎?
我知道这是一个很大的话题,但我只是在寻找一个起点。这可以使用 Python/Django 库和 MySQL 来完成吗?
【问题讨论】:
标签: python image-processing search-engine information-retrieval feature-detection
OpenCV 带有一个示例程序,可以满足您的需求。它被称为find_obj.py。在编辑器中将其拉起并更改:
surf = cv2.SURF(1000)
到
surf = cv2.SURF(100)
这应该会在指纹扫描的底片中找到许多“内部”兴趣点。
您可以尝试使用许多变量,并最终为您要比较的图像类型找到最佳配置。更改示例以允许您将单个图像与整个目录进行比较也相当简单。
我应该指出,这仅对执法部门使用的数字化指纹扫描有效。
【讨论】:
Python Imaging Library 可能是开始图像处理的最佳库。
最常用于实时图像处理的库(您不需要实时,但快速不会出错)是OpenCV。它有 Python 绑定和内置的feature detection algorithms。另见this comparison。
有关图像比较算法的概述,请查看this question。
【讨论】:
作为一种非常简单的方法,您可以抓取所有图像并为每个图像计算哈希值。
稍后,当用户提交图像进行搜索时,您也会为此计算一个哈希值并在您的数据库中查找相同的哈希值。
但是,这确实是一种非常简单的方法,并且仅在搜索精确的图像副本时才有效。理想情况下,每张图像都应转换为一些简化的特征集(以容忍同一图像的不同版本——不同的格式、大小、噪声等)用于比较。例如,值得尝试将图像(抓取和提交以供搜索)转换为 128x128 大小的灰度并计算其哈希值。
【讨论】: