node-red / node-red-nodes

Extra nodes for Node-RED
Other
964 stars 592 forks source link

Feature Request: Extracting EXIF Data for Camera Orientation and Positioning #1042

Closed joaquimjeferson closed 5 months ago

joaquimjeferson commented 5 months ago

Hello,

I'd like to suggest an enhancement for the node-red-node-exif node involving the extraction of additional EXIF data related to camera orientation and positioning. Specifically, it would be highly beneficial to include the extraction of Pitch, Yaw, Roll, Camera Pitch, Camera Yaw, and Camera Roll data.

These parameters are crucial for applications requiring detailed understanding of the camera's orientation and positioning at the time the photo was taken. This feature would greatly enhance the node's utility in scenarios like 3D modeling, augmented reality, and advanced photographic analysis.

The addition of these data points would provide a more comprehensive set of EXIF information, enabling users to gain deeper insights into the conditions under which their images were captured.

dceejay commented 5 months ago

Not a bad idea - do you have an example image I can work with to help develop this ? Though I thought it did send all the data it found as msg.exif. Thanks

joaquimjeferson commented 5 months ago

Of course, you can try with this files and use https://exif.tools/ or https://exiftool.org/ to compare

images.zip

dceejay commented 5 months ago

ah right - the library we use doesn't handle the latest exif spec so the DJI data isn't there (I can't see it in the other file anyway)... there is another library that you could use temporarily by importing it in a function node eg

[{"id":"59dd31043dab5cd2","type":"function","z":"1cf395c5f3a1c332","name":"function 1","func":"msg.exif = ExifReader.load(msg.payload);\nfor (const p in msg.exif) {\n    msg.exif[p] = msg.exif[p].description\n    if (!isNaN(Number(msg.exif[p])))  {\n        msg.exif[p] = Number(msg.exif[p])\n    }\n}\nreturn msg;","outputs":1,"timeout":0,"noerr":0,"initialize":"","finalize":"","libs":[{"var":"ExifReader","module":"exifreader"}],"x":300,"y":580,"wires":[["ef14805137d4c140"]]}]

But the way it reports values is a real PITA - so I'm not going to jump to that as-is - will keep looking for a better one.

dceejay commented 5 months ago

OK - have updated the node to use the newer supported exifreader library... This is a breaking change as the returned object is now much flatter - but does now support the newer extensions that drones use, etc. released as v1.0.0