iqdb: lower similarity cutoff, return more results (fix #4190).
* Change cutoffs on upload page to max 5 results, min. 20% similarity. * Change cutoffs on standalone /iqdb_queries page to max 20 results, min. 0% similarity. * /iqdb_queries.json: add `limit` and `similarity` params to change default cutoffs.
This commit is contained in:
@@ -3,15 +3,12 @@ class IqdbQueriesController < ApplicationController
|
|||||||
|
|
||||||
def show
|
def show
|
||||||
if params[:url]
|
if params[:url]
|
||||||
strategy = Sources::Strategies.find(params[:url])
|
url = Sources::Strategies.find(params[:url]).image_url
|
||||||
@matches = IqdbProxy.query(strategy.image_url)
|
@matches = IqdbProxy.query(url, params[:limit], params[:similarity])
|
||||||
end
|
elsif params[:post_id]
|
||||||
|
url = Post.find(params[:post_id]).preview_file_url
|
||||||
if params[:post_id]
|
@matches = IqdbProxy.query(url, params[:limit], params[:similarity])
|
||||||
@matches = IqdbProxy.query(Post.find(params[:post_id]).preview_file_url)
|
elsif params[:matches]
|
||||||
end
|
|
||||||
|
|
||||||
if params[:matches]
|
|
||||||
@matches = IqdbProxy.decorate_posts(JSON.parse(params[:matches]))
|
@matches = IqdbProxy.decorate_posts(JSON.parse(params[:matches]))
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|||||||
@@ -68,7 +68,7 @@ Upload.validate_upload = function (e) {
|
|||||||
|
|
||||||
Upload.initialize_iqdb_source = function() {
|
Upload.initialize_iqdb_source = function() {
|
||||||
if (/^https?:\/\//.test($("#upload_source").val())) {
|
if (/^https?:\/\//.test($("#upload_source").val())) {
|
||||||
$.get("/iqdb_queries.js", { url: $("#upload_source").val() });
|
$.get("/iqdb_queries.js", { url: $("#upload_source").val(), limit: 5, similarity: 20 });
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -1,12 +1,15 @@
|
|||||||
class IqdbProxy
|
class IqdbProxy
|
||||||
def self.query(image_url)
|
def self.query(url, limit, similarity)
|
||||||
raise NotImplementedError unless Danbooru.config.iqdbs_server.present?
|
raise NotImplementedError unless Danbooru.config.iqdbs_server.present?
|
||||||
|
|
||||||
url = URI.parse(Danbooru.config.iqdbs_server)
|
limit ||= 20
|
||||||
url.path = "/similar"
|
similarity ||= 0.0
|
||||||
url.query = {url: image_url}.to_query
|
query = { url: url, limit: limit }
|
||||||
json = HTTParty.get(url.to_s, Danbooru.config.httparty_options).parsed_response
|
response = HTTParty.get("#{Danbooru.config.iqdbs_server}/similar", query: query, **Danbooru.config.httparty_options)
|
||||||
decorate_posts(json)
|
|
||||||
|
json = decorate_posts(response.parsed_response)
|
||||||
|
json = json.select { |result| result["score"] >= similarity.to_f }.take(limit.to_i)
|
||||||
|
json
|
||||||
end
|
end
|
||||||
|
|
||||||
def self.decorate_posts(json)
|
def self.decorate_posts(json)
|
||||||
|
|||||||
@@ -23,8 +23,10 @@ class IqdbQueriesControllerTest < ActionDispatch::IntegrationTest
|
|||||||
end
|
end
|
||||||
|
|
||||||
should "render a response" do
|
should "render a response" do
|
||||||
IqdbProxy.expects(:query).with(@url).returns(@mocked_response)
|
IqdbProxy.expects(:query).returns(@mocked_response)
|
||||||
get_auth iqdb_queries_path(variant: "xhr"), @user, params: @params
|
get_auth iqdb_queries_path, @user, as: :javascript, params: @params
|
||||||
|
|
||||||
|
assert_response :success
|
||||||
assert_select("#post_#{@posts[0].id}")
|
assert_select("#post_#{@posts[0].id}")
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
@@ -41,8 +43,10 @@ class IqdbQueriesControllerTest < ActionDispatch::IntegrationTest
|
|||||||
end
|
end
|
||||||
|
|
||||||
should "redirect to iqdbs" do
|
should "redirect to iqdbs" do
|
||||||
IqdbProxy.expects(:query).with(@posts[0].preview_file_url).returns(@mocked_response)
|
IqdbProxy.expects(:query).returns(@mocked_response)
|
||||||
get_auth iqdb_queries_path, @user, params: @params
|
get_auth iqdb_queries_path, @user, params: @params
|
||||||
|
|
||||||
|
assert_response :success
|
||||||
assert_select("#post_#{@posts[0].id}")
|
assert_select("#post_#{@posts[0].id}")
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|||||||
Reference in New Issue
Block a user