你好,我的问题就是上面提到的问题。
我试着用感知散列来比较图片--我非常感兴趣地想要提高性能。我刚开始实验phash算法。
在上面提到的问题中,代码中使用了“d散列”。但在文本中提到了"phash“。
是否有可能将上述问题中使用的提高性能的思想仅仅应用于phash算法?
是否可以使用该代码进行感性散列,并将"dhash“一词改为”phash“?
非常感谢你的帮助!
约尔格
发布于 2022-09-26 12:21:51
Phash通常是一个比d散列慢的算法,但是有一个非常快速的开源phash实现:图片:PHash。唯一的问题是它是用Perl编写的。那么,重要的部分是在C中,所以它可以很容易地移植到python模块,但是必须有人去做。如果您不介意使用Perl,则可以直接使用它,例如处理链接到的帖子中随机生成的图像的结果:
parallel magick -size 640x480 xc: +noise random {}.jpg ::: {1..1000}你会做这样的事情:
use Image::PHash;
for (1..1000) {
my $iph = Image::PHash->new("$_.jpg", "Imlib2");
my $p = $iph->pHash();
print "$_ $p\n";
}这使用了模块支持的最快的映像库(需要安装Imlib2和图片:Imlib2 2 )。正如您对python所做的那样,您可以很容易地将其并行化,因此下面的M1 Mini只需1.3s就可以处理这1000个映像(单个线程上的vs 5.8s ):
use Image::PHash;
use MCE::Loop;
MCE::Loop::init {
max_workers => 8,
chunk_size => 'auto'
};
mce_loop {
my ($mce, $chunk_ref, $chunk_id) = @_;
for (@{$chunk_ref}) {
my $iph = Image::PHash->new("$_.jpg", "Imlib2");
my $p = $iph->pHash();
print "$_ $p\n";
}
} (1..1000);所以,它不是比d散列慢,而是更快一些。
很抱歉对python没有提供更多的帮助。
https://stackoverflow.com/questions/73699487
复制相似问题