mirror of
https://github.com/philomena-dev/philomena.git
synced 2024-12-02 15:48:00 +01:00
54 lines
1.3 KiB
Elixir
54 lines
1.3 KiB
Elixir
|
defmodule Mix.Tasks.RecalculateIntensities do
|
||
|
use Mix.Task
|
||
|
|
||
|
alias Philomena.Images.{Image, Thumbnailer}
|
||
|
alias Philomena.ImageIntensities.ImageIntensity
|
||
|
alias Philomena.Batch
|
||
|
alias Philomena.Repo
|
||
|
|
||
|
import Ecto.Query
|
||
|
|
||
|
@shortdoc "Recalculates all intensities for reverse search."
|
||
|
@requirements ["app.start"]
|
||
|
@impl Mix.Task
|
||
|
def run(_args) do
|
||
|
Batch.record_batches(Image, fn batch ->
|
||
|
batch
|
||
|
|> Stream.with_index()
|
||
|
|> Stream.each(fn {image, i} ->
|
||
|
image_file =
|
||
|
cond do
|
||
|
image.image_mime_type in ["image/png", "image/jpeg"] ->
|
||
|
Thumbnailer.image_file(image)
|
||
|
|
||
|
true ->
|
||
|
Path.join(Thumbnailer.image_thumb_dir(image), "rendered.png")
|
||
|
end
|
||
|
|
||
|
case System.cmd("image-intensities", [image_file]) do
|
||
|
{output, 0} ->
|
||
|
[nw, ne, sw, se] =
|
||
|
output
|
||
|
|> String.trim()
|
||
|
|> String.split("\t")
|
||
|
|> Enum.map(&String.to_float/1)
|
||
|
|
||
|
ImageIntensity
|
||
|
|> where(image_id: ^image.id)
|
||
|
|> Repo.update_all(set: [nw: nw, ne: ne, sw: sw, se: se])
|
||
|
|
||
|
_ ->
|
||
|
:err
|
||
|
end
|
||
|
|
||
|
if rem(i, 100) == 0 do
|
||
|
IO.write("\r#{image.id}")
|
||
|
end
|
||
|
end)
|
||
|
|> Stream.run()
|
||
|
end)
|
||
|
|
||
|
IO.puts("\nDone")
|
||
|
end
|
||
|
end
|