Tweet by @{{ display.screen_name }} ({{ display.user_name }}, {{ \"{:,}\".format(display.followers_count or 0) }} followers)\r\n on {{ display.created_at }}
\r\n \r\n{{ display.full_text }}\r\n {% if display.media_urls and json.loads(display.media_urls) %}\r\n {% for url in json.loads(display.media_urls) %}\r\n \r\n {% endfor %}\r\n {% endif %}\r\n
Taken in {{ display.place_city }} on {{ display.date }}
\r\n```", "reactions": "{\"total_count\": 0, \"+1\": 0, \"-1\": 0, \"laugh\": 0, \"hooray\": 0, \"confused\": 0, \"heart\": 0, \"rocket\": 0, \"eyes\": 0}", "issue": {"value": 691521965, "label": "Mechanism for defining custom display of results"}, "performed_via_github_app": null} {"html_url": "https://github.com/dogsheep/dogsheep-beta/issues/9#issuecomment-686154486", "issue_url": "https://api.github.com/repos/dogsheep/dogsheep-beta/issues/9", "id": 686154486, "node_id": "MDEyOklzc3VlQ29tbWVudDY4NjE1NDQ4Ng==", "user": {"value": 9599, "label": "simonw"}, "created_at": "2020-09-03T00:18:54Z", "updated_at": "2020-09-03T00:18:54Z", "author_association": "MEMBER", "body": "`display_sql` could be optional. If it's not defined, a `row` object is passed to the template which is the row that's stored in `search_index`. If `display_sql` IS defined then it's executed and the result is made available as a `display` object in addition to the `row` object.", "reactions": "{\"total_count\": 0, \"+1\": 0, \"-1\": 0, \"laugh\": 0, \"hooray\": 0, \"confused\": 0, \"heart\": 0, \"rocket\": 0, \"eyes\": 0}", "issue": {"value": 691521965, "label": "Mechanism for defining custom display of results"}, "performed_via_github_app": null} {"html_url": "https://github.com/dogsheep/dogsheep-beta/issues/9#issuecomment-686154627", "issue_url": "https://api.github.com/repos/dogsheep/dogsheep-beta/issues/9", "id": 686154627, "node_id": "MDEyOklzc3VlQ29tbWVudDY4NjE1NDYyNw==", "user": {"value": 9599, "label": "simonw"}, "created_at": "2020-09-03T00:19:22Z", "updated_at": "2020-09-03T00:19:22Z", "author_association": "MEMBER", "body": "If this performs well enough (100 displayed items will be 100 extra `display_sql` calls) then I'll go with this as the design for the feature.", "reactions": "{\"total_count\": 0, \"+1\": 0, \"-1\": 0, \"laugh\": 0, \"hooray\": 0, \"confused\": 0, \"heart\": 0, \"rocket\": 0, \"eyes\": 0}", "issue": {"value": 691521965, "label": "Mechanism for defining custom display of results"}, "performed_via_github_app": null} {"html_url": "https://github.com/dogsheep/dogsheep-beta/issues/9#issuecomment-686158454", "issue_url": "https://api.github.com/repos/dogsheep/dogsheep-beta/issues/9", "id": 686158454, "node_id": "MDEyOklzc3VlQ29tbWVudDY4NjE1ODQ1NA==", "user": {"value": 9599, "label": "simonw"}, "created_at": "2020-09-03T00:32:42Z", "updated_at": "2020-09-03T00:32:42Z", "author_association": "MEMBER", "body": "If this turns out to be too inefficient I could add a `display` text column to the `search_index` table which is designed to be populated with arbitrary JSON by the indexing query, which can then be used to render the template fragment.", "reactions": "{\"total_count\": 0, \"+1\": 0, \"-1\": 0, \"laugh\": 0, \"hooray\": 0, \"confused\": 0, \"heart\": 0, \"rocket\": 0, \"eyes\": 0}", "issue": {"value": 691521965, "label": "Mechanism for defining custom display of results"}, "performed_via_github_app": null} {"html_url": "https://github.com/dogsheep/dogsheep-beta/issues/9#issuecomment-686163754", "issue_url": "https://api.github.com/repos/dogsheep/dogsheep-beta/issues/9", "id": 686163754, "node_id": "MDEyOklzc3VlQ29tbWVudDY4NjE2Mzc1NA==", "user": {"value": 9599, "label": "simonw"}, "created_at": "2020-09-03T00:46:21Z", "updated_at": "2020-09-03T00:46:21Z", "author_association": "MEMBER", "body": "Challenge: the `dogsheep-beta.yml` configuration file that is passed to the `dogsheep-beta index` command needs to also be made available to Datasette itself, so that it can read the configuration.\r\n\r\nLet's say it can either be duplicated in the `plugins` configuration block of the `metadata.yml` OR you can do this in `metadata.yml`:\r\n\r\n```yaml\r\nplugins:\r\n dogsheep-beta:\r\n config_file: dogsheep-beta.yml\r\n```", "reactions": "{\"total_count\": 0, \"+1\": 0, \"-1\": 0, \"laugh\": 0, \"hooray\": 0, \"confused\": 0, \"heart\": 0, \"rocket\": 0, \"eyes\": 0}", "issue": {"value": 691521965, "label": "Mechanism for defining custom display of results"}, "performed_via_github_app": null} {"html_url": "https://github.com/dogsheep/dogsheep-beta/issues/9#issuecomment-686688963", "issue_url": "https://api.github.com/repos/dogsheep/dogsheep-beta/issues/9", "id": 686688963, "node_id": "MDEyOklzc3VlQ29tbWVudDY4NjY4ODk2Mw==", "user": {"value": 9599, "label": "simonw"}, "created_at": "2020-09-03T18:42:59Z", "updated_at": "2020-09-03T18:42:59Z", "author_association": "MEMBER", "body": "I'm pleased with how this works now.", "reactions": "{\"total_count\": 0, \"+1\": 0, \"-1\": 0, \"laugh\": 0, \"hooray\": 0, \"confused\": 0, \"heart\": 0, \"rocket\": 0, \"eyes\": 0}", "issue": {"value": 691521965, "label": "Mechanism for defining custom display of results"}, "performed_via_github_app": null} {"html_url": "https://github.com/dogsheep/dogsheep-beta/issues/9#issuecomment-686689122", "issue_url": "https://api.github.com/repos/dogsheep/dogsheep-beta/issues/9", "id": 686689122, "node_id": "MDEyOklzc3VlQ29tbWVudDY4NjY4OTEyMg==", "user": {"value": 9599, "label": "simonw"}, "created_at": "2020-09-03T18:43:20Z", "updated_at": "2020-09-03T18:43:20Z", "author_association": "MEMBER", "body": "Needs documentation.", "reactions": "{\"total_count\": 0, \"+1\": 0, \"-1\": 0, \"laugh\": 0, \"hooray\": 0, \"confused\": 0, \"heart\": 0, \"rocket\": 0, \"eyes\": 0}", "issue": {"value": 691521965, "label": "Mechanism for defining custom display of results"}, "performed_via_github_app": null} {"html_url": "https://github.com/dogsheep/dogsheep-beta/issues/9#issuecomment-686767208", "issue_url": "https://api.github.com/repos/dogsheep/dogsheep-beta/issues/9", "id": 686767208, "node_id": "MDEyOklzc3VlQ29tbWVudDY4Njc2NzIwOA==", "user": {"value": 9599, "label": "simonw"}, "created_at": "2020-09-03T21:12:14Z", "updated_at": "2020-09-03T21:12:14Z", "author_association": "MEMBER", "body": "Documentation: https://github.com/dogsheep/dogsheep-beta/blob/0.4/README.md#custom-results-display", "reactions": "{\"total_count\": 0, \"+1\": 0, \"-1\": 0, \"laugh\": 0, \"hooray\": 0, \"confused\": 0, \"heart\": 0, \"rocket\": 0, \"eyes\": 0}", "issue": {"value": 691521965, "label": "Mechanism for defining custom display of results"}, "performed_via_github_app": null} {"html_url": "https://github.com/dogsheep/dogsheep-photos/issues/1#issuecomment-623193947", "issue_url": "https://api.github.com/repos/dogsheep/dogsheep-photos/issues/1", "id": 623193947, "node_id": "MDEyOklzc3VlQ29tbWVudDYyMzE5Mzk0Nw==", "user": {"value": 9599, "label": "simonw"}, "created_at": "2020-05-03T22:36:17Z", "updated_at": "2020-05-03T22:36:17Z", "author_association": "MEMBER", "body": "I'm going to use [osxphotos](https://github.com/RhetTbull/osxphotos) for this.\r\n\r\nSince I've already got code to upload photos and insert them into a table based on their `sha256` hash, my first go at this will be to import data using the tool and foreign-key it to the `sha256` hash in the existing table.", "reactions": "{\"total_count\": 0, \"+1\": 0, \"-1\": 0, \"laugh\": 0, \"hooray\": 0, \"confused\": 0, \"heart\": 0, \"rocket\": 0, \"eyes\": 0}", "issue": {"value": 602533300, "label": "Import photo metadata from Apple Photos into SQLite"}, "performed_via_github_app": null} {"html_url": "https://github.com/dogsheep/dogsheep-photos/issues/1#issuecomment-623195197", "issue_url": "https://api.github.com/repos/dogsheep/dogsheep-photos/issues/1", "id": 623195197, "node_id": "MDEyOklzc3VlQ29tbWVudDYyMzE5NTE5Nw==", "user": {"value": 9599, "label": "simonw"}, "created_at": "2020-05-03T22:44:33Z", "updated_at": "2020-05-03T22:44:33Z", "author_association": "MEMBER", "body": "Command will be this:\r\n\r\n $ photos-to-sqlite apple-photos photos.db\r\n\r\nThis will populate a `apple_photos` table with the data imported by the `osxphotos` library, plus the calculated sha256.", "reactions": "{\"total_count\": 0, \"+1\": 0, \"-1\": 0, \"laugh\": 0, \"hooray\": 0, \"confused\": 0, \"heart\": 0, \"rocket\": 0, \"eyes\": 0}", "issue": {"value": 602533300, "label": "Import photo metadata from Apple Photos into SQLite"}, "performed_via_github_app": null} {"html_url": "https://github.com/dogsheep/dogsheep-photos/issues/1#issuecomment-623198653", "issue_url": "https://api.github.com/repos/dogsheep/dogsheep-photos/issues/1", "id": 623198653, "node_id": "MDEyOklzc3VlQ29tbWVudDYyMzE5ODY1Mw==", "user": {"value": 9599, "label": "simonw"}, "created_at": "2020-05-03T23:09:57Z", "updated_at": "2020-05-03T23:09:57Z", "author_association": "MEMBER", "body": "For locations: I'll add `place_x` columns for all of these:\r\n```\r\n(Pdb) photo.place.address._asdict()\r\n{'street': None, 'sub_locality': None, 'city': 'Loreto', 'sub_administrative_area': 'Loreto', 'state_province': 'BCS', 'postal_code': None, 'country': 'Mexico', 'iso_country_code': 'MX'}\r\n```", "reactions": "{\"total_count\": 0, \"+1\": 0, \"-1\": 0, \"laugh\": 0, \"hooray\": 0, \"confused\": 0, \"heart\": 0, \"rocket\": 0, \"eyes\": 0}", "issue": {"value": 602533300, "label": "Import photo metadata from Apple Photos into SQLite"}, "performed_via_github_app": null} {"html_url": "https://github.com/dogsheep/dogsheep-photos/issues/1#issuecomment-623198986", "issue_url": "https://api.github.com/repos/dogsheep/dogsheep-photos/issues/1", "id": 623198986, "node_id": "MDEyOklzc3VlQ29tbWVudDYyMzE5ODk4Ng==", "user": {"value": 9599, "label": "simonw"}, "created_at": "2020-05-03T23:12:31Z", "updated_at": "2020-05-03T23:12:46Z", "author_association": "MEMBER", "body": "To get the taken date in UTC:\r\n```\r\nfrom datetime import timezone\r\n(Pdb) photo.date.astimezone(timezone.utc).isoformat()\r\n'2018-02-13T20:21:31.620000+00:00'\r\n(Pdb) photo.date.astimezone(timezone.utc).isoformat().split(\".\")\r\n['2018-02-13T20:21:31', '620000+00:00']\r\n(Pdb) photo.date.astimezone(timezone.utc).isoformat().split(\".\")[0]\r\n'2018-02-13T20:21:31'\r\n(Pdb) photo.date.astimezone(timezone.utc).isoformat().split(\".\")[0] + \"+00:00\"\r\n'2018-02-13T20:21:31+00:00'\r\n\r\n```", "reactions": "{\"total_count\": 0, \"+1\": 0, \"-1\": 0, \"laugh\": 0, \"hooray\": 0, \"confused\": 0, \"heart\": 0, \"rocket\": 0, \"eyes\": 0}", "issue": {"value": 602533300, "label": "Import photo metadata from Apple Photos into SQLite"}, "performed_via_github_app": null} {"html_url": "https://github.com/dogsheep/dogsheep-photos/issues/1#issuecomment-623199214", "issue_url": "https://api.github.com/repos/dogsheep/dogsheep-photos/issues/1", "id": 623199214, "node_id": "MDEyOklzc3VlQ29tbWVudDYyMzE5OTIxNA==", "user": {"value": 9599, "label": "simonw"}, "created_at": "2020-05-03T23:14:08Z", "updated_at": "2020-05-03T23:14:08Z", "author_association": "MEMBER", "body": "Albums have UUIDs:\r\n```\r\n(Pdb) photo.album_info[0].__dict__\r\n{'_uuid': '17816791-ABF3-447B-942C-9FA8065EEBBA', '_db': osxphotos.PhotosDB(dbfile='/Users/simon/Pictures/Photos Library.photoslibrary/database/photos.db'), '_title': 'Geotaggable Photos geotagged'}\r\n```", "reactions": "{\"total_count\": 0, \"+1\": 0, \"-1\": 0, \"laugh\": 0, \"hooray\": 0, \"confused\": 0, \"heart\": 0, \"rocket\": 0, \"eyes\": 0}", "issue": {"value": 602533300, "label": "Import photo metadata from Apple Photos into SQLite"}, "performed_via_github_app": null} {"html_url": "https://github.com/dogsheep/dogsheep-photos/issues/1#issuecomment-623199701", "issue_url": "https://api.github.com/repos/dogsheep/dogsheep-photos/issues/1", "id": 623199701, "node_id": "MDEyOklzc3VlQ29tbWVudDYyMzE5OTcwMQ==", "user": {"value": 9599, "label": "simonw"}, "created_at": "2020-05-03T23:17:38Z", "updated_at": "2020-05-03T23:17:38Z", "author_association": "MEMBER", "body": "Record burst_uuid as a column:\r\n```\r\n(Pdb) with_bursts[0]._info[\"burstUUID\"]\r\n'703FAA23-57BF-40B4-8A33-D9CEB143391B'\r\n```", "reactions": "{\"total_count\": 0, \"+1\": 0, \"-1\": 0, \"laugh\": 0, \"hooray\": 0, \"confused\": 0, \"heart\": 0, \"rocket\": 0, \"eyes\": 0}", "issue": {"value": 602533300, "label": "Import photo metadata from Apple Photos into SQLite"}, "performed_via_github_app": null} {"html_url": "https://github.com/dogsheep/dogsheep-photos/issues/1#issuecomment-623199750", "issue_url": "https://api.github.com/repos/dogsheep/dogsheep-photos/issues/1", "id": 623199750, "node_id": "MDEyOklzc3VlQ29tbWVudDYyMzE5OTc1MA==", "user": {"value": 9599, "label": "simonw"}, "created_at": "2020-05-03T23:17:58Z", "updated_at": "2020-05-03T23:17:58Z", "author_association": "MEMBER", "body": "Reading this source code is really useful for figuring out how to store a photo in a DB table: https://github.com/RhetTbull/osxphotos/blob/7444b6d173918a3ad2a07aefce5ecf054786c787/osxphotos/photoinfo.py", "reactions": "{\"total_count\": 0, \"+1\": 0, \"-1\": 0, \"laugh\": 0, \"hooray\": 0, \"confused\": 0, \"heart\": 0, \"rocket\": 0, \"eyes\": 0}", "issue": {"value": 602533300, "label": "Import photo metadata from Apple Photos into SQLite"}, "performed_via_github_app": null} {"html_url": "https://github.com/dogsheep/dogsheep-photos/issues/1#issuecomment-623232984", "issue_url": "https://api.github.com/repos/dogsheep/dogsheep-photos/issues/1", "id": 623232984, "node_id": "MDEyOklzc3VlQ29tbWVudDYyMzIzMjk4NA==", "user": {"value": 9599, "label": "simonw"}, "created_at": "2020-05-04T02:41:32Z", "updated_at": "2020-05-04T02:41:32Z", "author_association": "MEMBER", "body": "Needs documentation.", "reactions": "{\"total_count\": 0, \"+1\": 0, \"-1\": 0, \"laugh\": 0, \"hooray\": 0, \"confused\": 0, \"heart\": 0, \"rocket\": 0, \"eyes\": 0}", "issue": {"value": 602533300, "label": "Import photo metadata from Apple Photos into SQLite"}, "performed_via_github_app": null} {"html_url": "https://github.com/dogsheep/dogsheep-photos/issues/12#issuecomment-618796564", "issue_url": "https://api.github.com/repos/dogsheep/dogsheep-photos/issues/12", "id": 618796564, "node_id": "MDEyOklzc3VlQ29tbWVudDYxODc5NjU2NA==", "user": {"value": 9599, "label": "simonw"}, "created_at": "2020-04-24T04:35:25Z", "updated_at": "2020-04-24T04:35:25Z", "author_association": "MEMBER", "body": "Code: https://github.com/dogsheep/photos-to-sqlite/blob/a388cf1f1b6b67752d669466cda8b171b6582171/photos_to_sqlite/cli.py#L109-L114", "reactions": "{\"total_count\": 0, \"+1\": 0, \"-1\": 0, \"laugh\": 0, \"hooray\": 0, \"confused\": 0, \"heart\": 0, \"rocket\": 0, \"eyes\": 0}", "issue": {"value": 606033104, "label": "If less than 500MB, show size in MB not GB"}, "performed_via_github_app": null} {"html_url": "https://github.com/dogsheep/dogsheep-photos/issues/13#issuecomment-620273692", "issue_url": "https://api.github.com/repos/dogsheep/dogsheep-photos/issues/13", "id": 620273692, "node_id": "MDEyOklzc3VlQ29tbWVudDYyMDI3MzY5Mg==", "user": {"value": 9599, "label": "simonw"}, "created_at": "2020-04-27T22:42:50Z", "updated_at": "2020-04-27T22:42:50Z", "author_association": "MEMBER", "body": "```\r\n>>> def ext_counts(directory):\r\n... counts = {}\r\n... for path in pathlib.Path(directory).glob(\"**/*\"):\r\n... ext = path.suffix\r\n... counts[ext] = counts.get(ext, 0) + 1\r\n... return counts\r\n... \r\n>>> \r\n>>> ext_counts(\"/Users/simon/Pictures/Photos Library.photoslibrary/originals\")\r\n{'': 16, '.heic': 15478, '.jpeg': 21691, '.mov': 946, '.png': 2262, '.gif': 38, '.mp4': 116, '.aae': 2}\r\n```", "reactions": "{\"total_count\": 0, \"+1\": 0, \"-1\": 0, \"laugh\": 0, \"hooray\": 0, \"confused\": 0, \"heart\": 0, \"rocket\": 0, \"eyes\": 0}", "issue": {"value": 607888367, "label": "Also upload movie files"}, "performed_via_github_app": null} {"html_url": "https://github.com/dogsheep/dogsheep-photos/issues/13#issuecomment-620309185", "issue_url": "https://api.github.com/repos/dogsheep/dogsheep-photos/issues/13", "id": 620309185, "node_id": "MDEyOklzc3VlQ29tbWVudDYyMDMwOTE4NQ==", "user": {"value": 9599, "label": "simonw"}, "created_at": "2020-04-28T00:39:45Z", "updated_at": "2020-04-28T00:39:45Z", "author_association": "MEMBER", "body": "I'm going to leave this until I have the mechanism for associating a live photo video with the photo.", "reactions": "{\"total_count\": 0, \"+1\": 0, \"-1\": 0, \"laugh\": 0, \"hooray\": 0, \"confused\": 0, \"heart\": 0, \"rocket\": 0, \"eyes\": 0}", "issue": {"value": 607888367, "label": "Also upload movie files"}, "performed_via_github_app": null} {"html_url": "https://github.com/dogsheep/dogsheep-photos/issues/14#issuecomment-620769348", "issue_url": "https://api.github.com/repos/dogsheep/dogsheep-photos/issues/14", "id": 620769348, "node_id": "MDEyOklzc3VlQ29tbWVudDYyMDc2OTM0OA==", "user": {"value": 9599, "label": "simonw"}, "created_at": "2020-04-28T18:09:21Z", "updated_at": "2020-04-28T18:09:21Z", "author_association": "MEMBER", "body": "Pricing is pretty good: free for first 1,000 calls per month, then $1.50 per thousand after that.", "reactions": "{\"total_count\": 0, \"+1\": 0, \"-1\": 0, \"laugh\": 0, \"hooray\": 0, \"confused\": 0, \"heart\": 0, \"rocket\": 0, \"eyes\": 0}", "issue": {"value": 608512747, "label": "Annotate photos using the Google Cloud Vision API"}, "performed_via_github_app": null} {"html_url": "https://github.com/dogsheep/dogsheep-photos/issues/14#issuecomment-620771067", "issue_url": "https://api.github.com/repos/dogsheep/dogsheep-photos/issues/14", "id": 620771067, "node_id": "MDEyOklzc3VlQ29tbWVudDYyMDc3MTA2Nw==", "user": {"value": 9599, "label": "simonw"}, "created_at": "2020-04-28T18:12:34Z", "updated_at": "2020-04-28T18:15:38Z", "author_association": "MEMBER", "body": "Python library docs: https://googleapis.dev/python/vision/latest/index.html\r\n\r\nI'm creating a new project for this called simonwillison-photos: https://console.cloud.google.com/projectcreate\r\n\r\nhttps://console.cloud.google.com/home/dashboard?project=simonwillison-photos\r\n\r\nThen I enabled the Vision API. The direct link to https://console.cloud.google.com/flows/enableapi?apiid=vision-json.googleapis.com which they provided in the docs didn't work - it gave me a \"You don't have sufficient permissions to use the requested API\" error - but starting at the \"Enable APIs\" page and searching for it worked fine.\r\n\r\nI created a new service account as an \"owner\" of that project: https://console.cloud.google.com/apis/credentials/serviceaccountkey (and complained about it on Twitter and through their feedback form)\r\n\r\n`pip install google-cloud-vision`\r\n\r\n```python\r\nfrom google.cloud import vision\r\nclient = vision.ImageAnnotatorClient.from_service_account_file(\"simonwillison-photos-18c570b301fe.json\")\r\n# Photo of a lemur\r\nresponse = client.annotate_image(\r\n {\r\n \"image\": {\r\n \"source\": {\r\n \"image_uri\": \"https://photos.simonwillison.net/i/1b3414ee9ade67ce04ade9042e6d4b433d1e523c9a16af17f490e2c0a619755b.jpeg\"\r\n }\r\n },\r\n \"features\": [\r\n {\"type\": vision.enums.Feature.Type.IMAGE_PROPERTIES},\r\n {\"type\": vision.enums.Feature.Type.OBJECT_LOCALIZATION},\r\n {\"type\": vision.enums.Feature.Type.LABEL_DETECTION},\r\n ],\r\n }\r\n)\r\nresponse\r\n```\r\nOutput is:\r\n```\r\nlabel_annotations {\r\n mid: \"/m/09686\"\r\n description: \"Vertebrate\"\r\n score: 0.9851104021072388\r\n topicality: 0.9851104021072388\r\n}\r\nlabel_annotations {\r\n mid: \"/m/04rky\"\r\n description: \"Mammal\"\r\n score: 0.975814163684845\r\n topicality: 0.975814163684845\r\n}\r\nlabel_annotations {\r\n mid: \"/m/01280g\"\r\n description: \"Wildlife\"\r\n score: 0.8973650336265564\r\n topicality: 0.8973650336265564\r\n}\r\nlabel_annotations {\r\n mid: \"/m/02f9pk\"\r\n description: \"Lemur\"\r\n score: 0.8270352482795715\r\n topicality: 0.8270352482795715\r\n}\r\nlabel_annotations {\r\n mid: \"/m/0fbf1m\"\r\n description: \"Terrestrial animal\"\r\n score: 0.7443860769271851\r\n topicality: 0.7443860769271851\r\n}\r\nlabel_annotations {\r\n mid: \"/m/06z_nw\"\r\n description: \"Tail\"\r\n score: 0.6934166550636292\r\n topicality: 0.6934166550636292\r\n}\r\nlabel_annotations {\r\n mid: \"/m/0b5gs\"\r\n description: \"Branch\"\r\n score: 0.6203985214233398\r\n topicality: 0.6203985214233398\r\n}\r\nlabel_annotations {\r\n mid: \"/m/05s2s\"\r\n description: \"Plant\"\r\n score: 0.585474967956543\r\n topicality: 0.585474967956543\r\n}\r\nlabel_annotations {\r\n mid: \"/m/089v3\"\r\n description: \"Zoo\"\r\n score: 0.5488107800483704\r\n topicality: 0.5488107800483704\r\n}\r\nlabel_annotations {\r\n mid: \"/m/02tcwp\"\r\n description: \"Trunk\"\r\n score: 0.5200017690658569\r\n topicality: 0.5200017690658569\r\n}\r\nimage_properties_annotation {\r\n dominant_colors {\r\n colors {\r\n color {\r\n red: 172.0\r\n green: 146.0\r\n blue: 116.0\r\n }\r\n score: 0.24523821473121643\r\n pixel_fraction: 0.027533333748579025\r\n }\r\n colors {\r\n color {\r\n red: 54.0\r\n green: 50.0\r\n blue: 42.0\r\n }\r\n score: 0.10449723154306412\r\n pixel_fraction: 0.12893334031105042\r\n }\r\n colors {\r\n color {\r\n red: 141.0\r\n green: 121.0\r\n blue: 97.0\r\n }\r\n score: 0.1391485631465912\r\n pixel_fraction: 0.039133332669734955\r\n }\r\n colors {\r\n color {\r\n red: 28.0\r\n green: 25.0\r\n blue: 20.0\r\n }\r\n score: 0.08589499443769455\r\n pixel_fraction: 0.11506666988134384\r\n }\r\n colors {\r\n color {\r\n red: 87.0\r\n green: 82.0\r\n blue: 74.0\r\n }\r\n score: 0.0845794677734375\r\n pixel_fraction: 0.16113333404064178\r\n }\r\n colors {\r\n color {\r\n red: 121.0\r\n green: 117.0\r\n blue: 108.0\r\n }\r\n score: 0.05901569500565529\r\n pixel_fraction: 0.13379999995231628\r\n }\r\n colors {\r\n color {\r\n red: 94.0\r\n green: 83.0\r\n blue: 66.0\r\n }\r\n score: 0.049011144787073135\r\n pixel_fraction: 0.03946666792035103\r\n }\r\n colors {\r\n color {\r\n red: 155.0\r\n green: 117.0\r\n blue: 90.0\r\n }\r\n score: 0.04164913296699524\r\n pixel_fraction: 0.0023333332501351833\r\n }\r\n colors {\r\n color {\r\n red: 178.0\r\n green: 143.0\r\n blue: 102.0\r\n }\r\n score: 0.02993861958384514\r\n pixel_fraction: 0.0012666666880249977\r\n }\r\n colors {\r\n color {\r\n red: 61.0\r\n green: 51.0\r\n blue: 35.0\r\n }\r\n score: 0.027391711249947548\r\n pixel_fraction: 0.01953333243727684\r\n }\r\n }\r\n}\r\ncrop_hints_annotation {\r\n crop_hints {\r\n bounding_poly {\r\n vertices {\r\n x: 2073\r\n }\r\n vertices {\r\n x: 4008\r\n }\r\n vertices {\r\n x: 4008\r\n y: 3455\r\n }\r\n vertices {\r\n x: 2073\r\n y: 3455\r\n }\r\n }\r\n confidence: 0.65625\r\n importance_fraction: 0.746666669845581\r\n }\r\n}\r\nlocalized_object_annotations {\r\n mid: \"/m/0jbk\"\r\n name: \"Animal\"\r\n score: 0.7008256912231445\r\n bounding_poly {\r\n normalized_vertices {\r\n x: 0.0390297956764698\r\n y: 0.26235100626945496\r\n }\r\n normalized_vertices {\r\n x: 0.8466796875\r\n y: 0.26235100626945496\r\n }\r\n normalized_vertices {\r\n x: 0.8466796875\r\n y: 0.9386426210403442\r\n }\r\n normalized_vertices {\r\n x: 0.0390297956764698\r\n y: 0.9386426210403442\r\n }\r\n }\r\n}\r\n```", "reactions": "{\"total_count\": 0, \"+1\": 0, \"-1\": 0, \"laugh\": 0, \"hooray\": 0, \"confused\": 0, \"heart\": 0, \"rocket\": 0, \"eyes\": 0}", "issue": {"value": 608512747, "label": "Annotate photos using the Google Cloud Vision API"}, "performed_via_github_app": null} {"html_url": "https://github.com/dogsheep/dogsheep-photos/issues/14#issuecomment-620771698", "issue_url": "https://api.github.com/repos/dogsheep/dogsheep-photos/issues/14", "id": 620771698, "node_id": "MDEyOklzc3VlQ29tbWVudDYyMDc3MTY5OA==", "user": {"value": 9599, "label": "simonw"}, "created_at": "2020-04-28T18:13:48Z", "updated_at": "2020-04-28T18:13:48Z", "author_association": "MEMBER", "body": "For face detection:\r\n```\r\n {\"type\": vision.enums.Feature.Type.Type.FACE_DETECTION}\r\n```\r\nFor OCR:\r\n```\r\n {\"type\": vision.enums.Feature.Type.DOCUMENT_TEXT_DETECTION}\r\n```", "reactions": "{\"total_count\": 0, \"+1\": 0, \"-1\": 0, \"laugh\": 0, \"hooray\": 0, \"confused\": 0, \"heart\": 0, \"rocket\": 0, \"eyes\": 0}", "issue": {"value": 608512747, "label": "Annotate photos using the Google Cloud Vision API"}, "performed_via_github_app": null} {"html_url": "https://github.com/dogsheep/dogsheep-photos/issues/14#issuecomment-620772190", "issue_url": "https://api.github.com/repos/dogsheep/dogsheep-photos/issues/14", "id": 620772190, "node_id": "MDEyOklzc3VlQ29tbWVudDYyMDc3MjE5MA==", "user": {"value": 9599, "label": "simonw"}, "created_at": "2020-04-28T18:14:43Z", "updated_at": "2020-04-28T18:14:43Z", "author_association": "MEMBER", "body": "Database schema for this will require some thought. Just dumping the output into a JSON column isn't going to be flexible enough - I want to be able to FTS against labels and OCR text, and potentially query against other characteristics too.", "reactions": "{\"total_count\": 0, \"+1\": 0, \"-1\": 0, \"laugh\": 0, \"hooray\": 0, \"confused\": 0, \"heart\": 0, \"rocket\": 0, \"eyes\": 0}", "issue": {"value": 608512747, "label": "Annotate photos using the Google Cloud Vision API"}, "performed_via_github_app": null} {"html_url": "https://github.com/dogsheep/dogsheep-photos/issues/14#issuecomment-620774507", "issue_url": "https://api.github.com/repos/dogsheep/dogsheep-photos/issues/14", "id": 620774507, "node_id": "MDEyOklzc3VlQ29tbWVudDYyMDc3NDUwNw==", "user": {"value": 9599, "label": "simonw"}, "created_at": "2020-04-28T18:19:06Z", "updated_at": "2020-04-28T18:19:06Z", "author_association": "MEMBER", "body": "The default timeout is a bit aggressive and sometimes failed for me if my resizing proxy took too long to fetch and resize the image.\r\n\r\n`client.annotate_image(..., timeout=3.0)` may be worth trying.", "reactions": "{\"total_count\": 0, \"+1\": 0, \"-1\": 0, \"laugh\": 0, \"hooray\": 0, \"confused\": 0, \"heart\": 0, \"rocket\": 0, \"eyes\": 0}", "issue": {"value": 608512747, "label": "Annotate photos using the Google Cloud Vision API"}, "performed_via_github_app": null} {"html_url": "https://github.com/dogsheep/dogsheep-photos/issues/15#issuecomment-623723026", "issue_url": "https://api.github.com/repos/dogsheep/dogsheep-photos/issues/15", "id": 623723026, "node_id": "MDEyOklzc3VlQ29tbWVudDYyMzcyMzAyNg==", "user": {"value": 9599, "label": "simonw"}, "created_at": "2020-05-04T21:41:30Z", "updated_at": "2020-05-04T21:41:30Z", "author_association": "MEMBER", "body": "I'm going to put these in a table called `apple_photos_scores` - I'll also pull in the following columns from the `ZGENERICASSET` table:\r\n\r\n* `ZOVERALLAESTHETICSCORE`\r\n* `ZCURATIONSCORE`\r\n* `ZHIGHLIGHTVISIBILITYSCORE`\r\n* `ZPROMOTIONSCORE`", "reactions": "{\"total_count\": 0, \"+1\": 0, \"-1\": 0, \"laugh\": 0, \"hooray\": 0, \"confused\": 0, \"heart\": 0, \"rocket\": 0, \"eyes\": 0}", "issue": {"value": 612151767, "label": "Expose scores from ZCOMPUTEDASSETATTRIBUTES"}, "performed_via_github_app": null}