def calculate_difference(preview, original_image_id): """Calculate difference between two images. @param preview: preview dict @param original_image_id: original image ID @return: difference, difference percentage """ try: i1 = str2image(get_file(original_image_id).read()) except IOError as e: logger.warning("Comparer error reading image: {0}".format(e)) return # Check if thumb was resized. if "original_file" in preview: i2 = str2image(get_file(preview["original_file"]).read()) else: i2 = str2image(get_file(preview["file"]).read()) # Resize. width, height = i2.size try: i1 = i1.resize([width, height], Image.ANTIALIAS) except IOError as e: logger.warning("Comparer error reading image: {0}".format(e)) return # Checks. #assert i1.mode == i2.mode, "Different kinds of images." #assert i1.size == i2.size, "Different sizes." # Calculate difference. pairs = izip(i1.getdata(), i2.getdata()) if len(i1.getbands()) == 1: # for gray-scale jpegs dif = sum(abs(p1 - p2) for p1, p2 in pairs) else: dif = sum( abs(c1 - c2) for p1, p2 in pairs for c1, c2 in zip(p1, p2)) ncomponents = i1.size[0] * i1.size[1] * 3 # Get diff percentage. diff_perc = int((dif / 255.0 * 100) / ncomponents) # Binary option. if diff_perc >= 15: diff = True else: diff = False return diff, diff_perc
def calculate_difference(preview, original_image_id): """Calculate difference between two images. @param preview: preview dict @param original_image_id: original image ID @return: difference, difference percentage """ try: i1 = str2image(get_file(original_image_id).read()) except IOError as e: logger.warning("Comparer error reading image: {0}".format(e)) return # Check if thumb was resized. if "original_file" in preview: i2 = str2image(get_file(preview["original_file"]).read()) else: i2 = str2image(get_file(preview["file"]).read()) # Resize. width, height = i2.size try: i1 = i1.resize([width, height], Image.ANTIALIAS) except IOError as e: logger.warning("Comparer error reading image: {0}".format(e)) return # Checks. #assert i1.mode == i2.mode, "Different kinds of images." #assert i1.size == i2.size, "Different sizes." # Calculate difference. pairs = izip(i1.getdata(), i2.getdata()) if len(i1.getbands()) == 1: # for gray-scale jpegs dif = sum(abs(p1-p2) for p1,p2 in pairs) else: dif = sum(abs(c1-c2) for p1,p2 in pairs for c1,c2 in zip(p1,p2)) ncomponents = i1.size[0] * i1.size[1] * 3 # Get diff percentage. diff_perc = int((dif / 255.0 * 100) / ncomponents) # Binary option. if diff_perc >= 15: diff = True else: diff = False return diff, diff_perc
def _get_previews(self): """Extract previews.""" if len(self.metadata.get_preview_properties()) > 0: # Fetched previews key. self.results["metadata"]["preview"] = [] for preview in self.metadata.get_preview_properties(): p = AutoVivification() p["mime_type"] = preview.get_mime_type() p["size"] = len(self.metadata.get_preview_image(preview).get_data()) p["ext"] = preview.get_extension() p["dimensions"] = [preview.get_width(), preview.get_height()] # Resize if needed, and store. try: img = str2image(self.metadata.get_preview_image(preview).get_data()) if preview.get_width() > 256 or preview.get_height() > 160: p["original_file"] = save_file(image2str(img), content_type="image/jpeg") img.thumbnail([256, 160], Image.ANTIALIAS) p["file"] = save_file(image2str(img), content_type="image/jpeg") except Exception as e: logger.warning("Error reading preview: {0}".format(e)) continue finally: # Save. self.results["metadata"]["preview"].append(p)
def run(self, task): image = str2image(task.get_file_data) self.results["imghash"]["a_hash"] = str(imagehash.average_hash(image)) self.results["imghash"]["p_hash"] = str(imagehash.phash(image)) self.results["imghash"]["d_hash"] = str(imagehash.dhash(image)) return self.results
def run(self, task): self.task = task image = str2image(task.get_file_data) # Calculate hash. self.results["imghash"]["a_hash"] = str(imagehash.average_hash(image, hash_size=self.HASH_SIZE)) self.results["imghash"]["p_hash"] = str(imagehash.phash(image, hash_size=self.HASH_SIZE)) self.results["imghash"]["d_hash"] = str(imagehash.dhash(image, hash_size=self.HASH_SIZE)) # Get similar images. self.results["similar"]["a_hash"] = self.get_similar_images(self.results["imghash"]["a_hash"], imagehash.average_hash) self.results["similar"]["p_hash"] = self.get_similar_images(self.results["imghash"]["p_hash"], imagehash.phash) self.results["similar"]["d_hash"] = self.get_similar_images(self.results["imghash"]["d_hash"], imagehash.dhash) return self.results
def run(self, task): try: tmp_image = str2image(task.get_file_data) n = Nude(tmp_image) # The resize is used to have although less accurate processing. # TODO: move this to options panel. n.resize(maxwidth=1000) n.parse() except Exception as e: logger.warning("[Task {0}]: Error detecting nude: {1}".format(task.id, e)) else: self.results["nude"]["nudepy"]["result"] = n.result self.results["nude"]["nudepy"]["msg"] = n.message return self.results
def run(self, task): try: tmp_image = str2image(task.get_file_data) n = Nude(tmp_image) # The resize is used to have although less accurate processing. # TODO: move this to options panel. n.resize(maxwidth=1000) n.parse() except Exception as e: logger.warning("[Task {0}]: Error detecting nude: {1}".format( task.id, e)) else: self.results["nude"]["nudepy"]["result"] = n.result self.results["nude"]["nudepy"]["msg"] = n.message return self.results
def run(self, task): self.task = task image = str2image(task.get_file_data) # Calculate hash. self.results["imghash"]["a_hash"] = str( imagehash.average_hash(image, hash_size=self.HASH_SIZE)) self.results["imghash"]["p_hash"] = str( imagehash.phash(image, hash_size=self.HASH_SIZE)) self.results["imghash"]["d_hash"] = str( imagehash.dhash(image, hash_size=self.HASH_SIZE)) # Get similar images. self.results["similar"]["a_hash"] = self.get_similar_images( self.results["imghash"]["a_hash"], imagehash.average_hash) self.results["similar"]["p_hash"] = self.get_similar_images( self.results["imghash"]["p_hash"], imagehash.phash) self.results["similar"]["d_hash"] = self.get_similar_images( self.results["imghash"]["d_hash"], imagehash.dhash) return self.results