extractImagePatches.js 2.9 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556
  1. "use strict";
  2. Object.defineProperty(exports, "__esModule", { value: true });
  3. var tslib_1 = require("tslib");
  4. var tf = require("@tensorflow/tfjs-core");
  5. var dom_1 = require("../dom");
  6. var env_1 = require("../env");
  7. var normalize_1 = require("./normalize");
  8. function extractImagePatches(img, boxes, _a) {
  9. var width = _a.width, height = _a.height;
  10. return tslib_1.__awaiter(this, void 0, void 0, function () {
  11. var imgCtx, bitmaps, imagePatchesDatas;
  12. var _this = this;
  13. return tslib_1.__generator(this, function (_b) {
  14. switch (_b.label) {
  15. case 0:
  16. imgCtx = dom_1.getContext2dOrThrow(img);
  17. return [4 /*yield*/, Promise.all(boxes.map(function (box) { return tslib_1.__awaiter(_this, void 0, void 0, function () {
  18. var _a, y, ey, x, ex, fromX, fromY, imgData;
  19. return tslib_1.__generator(this, function (_b) {
  20. _a = box.padAtBorders(img.height, img.width), y = _a.y, ey = _a.ey, x = _a.x, ex = _a.ex;
  21. fromX = x - 1;
  22. fromY = y - 1;
  23. imgData = imgCtx.getImageData(fromX, fromY, (ex - fromX), (ey - fromY));
  24. return [2 /*return*/, env_1.env.isNodejs() ? dom_1.createCanvasFromMedia(imgData) : createImageBitmap(imgData)];
  25. });
  26. }); }))];
  27. case 1:
  28. bitmaps = _b.sent();
  29. imagePatchesDatas = [];
  30. bitmaps.forEach(function (bmp) {
  31. var patch = dom_1.createCanvas({ width: width, height: height });
  32. var patchCtx = dom_1.getContext2dOrThrow(patch);
  33. patchCtx.drawImage(bmp, 0, 0, width, height);
  34. var data = patchCtx.getImageData(0, 0, width, height).data;
  35. var currData = [];
  36. // RGBA -> BGR
  37. for (var i = 0; i < data.length; i += 4) {
  38. currData.push(data[i + 2]);
  39. currData.push(data[i + 1]);
  40. currData.push(data[i]);
  41. }
  42. imagePatchesDatas.push(currData);
  43. });
  44. return [2 /*return*/, imagePatchesDatas.map(function (data) {
  45. var t = tf.tidy(function () {
  46. var imagePatchTensor = tf.transpose(tf.tensor4d(data, [1, width, height, 3]), [0, 2, 1, 3]).toFloat();
  47. return normalize_1.normalize(imagePatchTensor);
  48. });
  49. return t;
  50. })];
  51. }
  52. });
  53. });
  54. }
  55. exports.extractImagePatches = extractImagePatches;
  56. //# sourceMappingURL=extractImagePatches.js.map