Как вставить запятую между парами чисел с плавающей запятой? - PullRequest
0 голосов
/ 12 апреля 2020

Что я пытаюсь сделать

Я хочу нарисовать ограничивающие рамки, указывающие объекты, распознанные на локально снятой фотографии из JSON объекта, загруженного из REST Google Vision API. Я хочу нарисовать ограничивающие рамки с помощью вызова ImageMagick, как показано ниже.

convert output.jpg -draw 'stroke red fill none polygon 0,78.7 87,78 87,151 0,151' outputbox.png

Как я пытаюсь это сделать

Я использую терминал на Ma c OS 10.15. 4 (bash, а не zsh, я переключил его обратно на bash с zsh.)

Я получаю от Google ответ JSON, как показано ниже.

{
  "responses": [
    {
      "localizedObjectAnnotations": [
        {
          "mid": "/m/0jbk",
          "name": "Animal",
          "score": 0.776703,
          "boundingPoly": {
            "normalizedVertices": [
              {
                "y": 0.327939
              },
              {
                "x": 0.27193785,
                "y": 0.327939
              },
              {
                "x": 0.27193785,
                "y": 0.62985307
              },
              {
                "y": 0.62985307
              }
            ]
          }
        },

Я использовал jq (как показано ниже) для анализа ответа, и я думаю, что, вероятно, я не использую оптимальный запрос для достижения того, чего я хочу.

INPUT

jq '.responses[0][][0].boundingPoly.normalizedVertices[] | if .x==null then 0 else .x*320 end, .y*240' img.json


OUTPUT

0 78.70536 87.020112 78.70536 87.020112 151.16473680000001 0 151.16473680000001

Чтобы ввести их в магию преобразования изображения в качестве координат рисования, я хочу вывести строку, в которой каждые два числа объединяются в пару с помощью «,», а затем разделяются эти пары с пробелами, как показано ниже.

0,78.70536 87.020112,78.70536 87.020112,151.16473680000001 0,151.16473680000001

Я пробовал регулярные выражения в sed и ssed (с опцией -r для perl), но я просто вращаю свои колеса.

Это мой первый вопрос по stackoverflow, поэтому извиняюсь за ошибки n00b.

Спасибо!

1 Ответ

2 голосов
/ 12 апреля 2020

Сначала объедините пары xy запятыми, затем объедините полученные строки через пробелы. Например (нерелевантные детали для ясности опущены):

.normalizedVertices
| map("\(if has("x") then .x * 320 else 0 end),\(.y * 240)")
| join(" ")

Демонстрационная версия

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...