Mysql
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Mysql

Tìm các hình ảnh tương tự trong PHP / MySQL (thuần túy)

Tôi đã có chính xác này vấn đề tương tự trước đây.

Vui lòng sao chép những gì tôi đã làm và hy vọng nó sẽ giúp bạn / giải quyết vấn đề của bạn.

Tôi đã giải quyết nó như thế nào

Ý tưởng đầu tiên của tôi đã thất bại, tương tự như những gì bạn có thể đang nghĩ, là tôi đã kết thúc việc tạo chuỗi cho mọi hình ảnh đơn lẻ (bất kể kích thước nào). Nhưng tôi nhanh chóng phát hiện ra rằng điều này làm đầy cơ sở dữ liệu của bạn siêu nhanh và không hiệu quả.

Tùy chọn tiếp theo (hoạt động) là một hình ảnh nhỏ hơn (như 5px của bạn ý tưởng) và tôi đã làm chính xác điều đó, nhưng với 10px * 10px hình ảnh. Cách tôi tạo 'băm' cho mỗi hình ảnh là imagecolorat() chức năng.

Xem php.net tại đây.

Khi nhận được rgb màu sắc cho hình ảnh, tôi đã làm tròn chúng đến 50 gần nhất , do đó màu sắc ít cụ thể hơn. Số đó (50 ) là những gì bạn muốn thay đổi tùy thuộc vào cách cụ thể bạn muốn các tìm kiếm của mình trở thành.

ví dụ:

// Pixel RGB
rgb(105, 126, 225) // Original
rgb(100, 150, 250) // After rounding numbers to nearest 50

Sau khi thực hiện việc này với từng pixel (10px * 10px sẽ cung cấp cho bạn 100 rgb() trở lại), sau đó tôi chuyển chúng thành một mảng và lưu trữ chúng trong cơ sở dữ liệu dưới dạng base64_encode()serialize() .

Khi thực hiện tìm kiếm các hình ảnh tương tự, tôi đã thực hiện cùng một quy trình chính xác với hình ảnh mà họ muốn tải lên, sau đó trích xuất các 'băm' hình ảnh từ cơ sở dữ liệu để so sánh tất cả chúng và xem những gì đã phù hợp với rgb của.

Mẹo

  • Lớn hơn 50 đó nằm trong rgb làm tròn, ít cụ thể hơn tìm kiếm của bạn sẽ là (và ngược lại).

  • Nếu bạn muốn SQL của mình để cụ thể hơn, tốt hơn bạn nên lưu trữ bổ sung / cụ thể thông tin về hình ảnh trong cơ sở dữ liệu, để bạn có thể giới hạn các tìm kiếm bạn nhận được trong cơ sở dữ liệu. ví dụ: . nếu tỷ lệ co là 4:3 , chỉ kéo hình ảnh xung quanh 4:3 từ cơ sở dữ liệu. (v.v.)

  • Có thể khó để có được điều này một cách hoàn hảo 5px * 5px , vì vậy, một đề xuất là phpthumb . Tôi đã sử dụng nó với cú pháp:

Chúc bạn may mắn, hy vọng tôi có thể giúp đỡ.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Cách xử lý khóa ngoại khi phân vùng

  2. Khung thực thể Chèn dữ liệu ban đầu khi xây dựng lại

  3. Làm thế nào chúng ta có thể khác nhau giữa LEFT OUTER JOIN và Left Join

  4. Truy vấn chậm khi sử dụng ORDER BY

  5. Làm thế nào để biết liệu khi sử dụng trên bản cập nhật khóa trùng lặp, một hàng đã được chèn hoặc cập nhật hay chưa?