Cover Letter Detail
Show a cover letter.
GET /api/covers/24803/?format=api
{ "id": 24803, "url": "https://patchwork.libcamera.org/api/covers/24803/?format=api", "web_url": "https://patchwork.libcamera.org/cover/24803/", "project": { "id": 1, "url": "https://patchwork.libcamera.org/api/projects/1/?format=api", "name": "libcamera", "link_name": "libcamera", "list_id": "libcamera_core", "list_email": "libcamera-devel@lists.libcamera.org", "web_url": "", "scm_url": "", "webscm_url": "" }, "msgid": "<20251024144049.3311-1-david.plowman@raspberrypi.com>", "date": "2025-10-24T14:15:59", "name": "[0/4] Raspberry Pi AWB using neural networks", "submitter": { "id": 42, "url": "https://patchwork.libcamera.org/api/people/42/?format=api", "name": "David Plowman", "email": "david.plowman@raspberrypi.com" }, "mbox": "https://patchwork.libcamera.org/cover/24803/mbox/", "series": [ { "id": 5526, "url": "https://patchwork.libcamera.org/api/series/5526/?format=api", "web_url": "https://patchwork.libcamera.org/project/libcamera/list/?series=5526", "date": "2025-10-24T14:15:59", "name": "Raspberry Pi AWB using neural networks", "version": 1, "mbox": "https://patchwork.libcamera.org/series/5526/mbox/" } ], "comments": "https://patchwork.libcamera.org/api/covers/24803/comments/", "headers": { "Return-Path": "<libcamera-devel-bounces@lists.libcamera.org>", "X-Original-To": "parsemail@patchwork.libcamera.org", "Delivered-To": "parsemail@patchwork.libcamera.org", "Received": [ "from lancelot.ideasonboard.com (lancelot.ideasonboard.com\n\t[92.243.16.209])\n\tby patchwork.libcamera.org (Postfix) with ESMTPS id 6141BC3259\n\tfor <parsemail@patchwork.libcamera.org>;\n\tFri, 24 Oct 2025 14:40:59 +0000 (UTC)", "from lancelot.ideasonboard.com (localhost [IPv6:::1])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTP id 8B6CB60977;\n\tFri, 24 Oct 2025 16:40:58 +0200 (CEST)", "from mail-wr1-x42c.google.com (mail-wr1-x42c.google.com\n\t[IPv6:2a00:1450:4864:20::42c])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTPS id D25B460974\n\tfor <libcamera-devel@lists.libcamera.org>;\n\tFri, 24 Oct 2025 16:40:56 +0200 (CEST)", "by mail-wr1-x42c.google.com with SMTP id\n\tffacd0b85a97d-3ee130237a8so1482677f8f.0\n\tfor <libcamera-devel@lists.libcamera.org>;\n\tFri, 24 Oct 2025 07:40:56 -0700 (PDT)", "from localhost.localdomain ([2a06:61c0:f337:0:8aba:2a85:b765:a23e])\n\tby smtp.gmail.com with ESMTPSA id\n\tffacd0b85a97d-429898ecabdsm9835993f8f.47.2025.10.24.07.40.54\n\t(version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256);\n\tFri, 24 Oct 2025 07:40:54 -0700 (PDT)" ], "Authentication-Results": "lancelot.ideasonboard.com; dkim=pass (2048-bit key;\n\tunprotected) header.d=raspberrypi.com header.i=@raspberrypi.com\n\theader.b=\"KHpi3tM2\"; dkim-atps=neutral", "DKIM-Signature": "v=1; a=rsa-sha256; c=relaxed/relaxed;\n\td=raspberrypi.com; s=google; t=1761316856; x=1761921656;\n\tdarn=lists.libcamera.org; \n\th=content-transfer-encoding:mime-version:message-id:date:subject:cc\n\t:to:from:from:to:cc:subject:date:message-id:reply-to;\n\tbh=nDFe4dQU0l4w9wPRMvbWU+zyzN47eglyj+Xh9oe8AEM=;\n\tb=KHpi3tM2YxQWHDqNfAO2RkWql68MJ6naeTaOMtqX/B9oDmklC24VHGgJn7ezBwYlyc\n\tq+++KWzvRyhSIKv4R1IRnBk04UklxDfXWUg28BrQHO4+g7OQSh3KK7tnwK6E+VcivE8x\n\tm2R0TXSGkoxpLFZhaxONVUKOWcc5tL9t5J0OBKyMRkf9HmJ9WnMLhvrnC10jcJL9UuYk\n\t5yA76UdPsVgfJy3j13CaTFsdpmCgFK/RRvWsI5fKB/XGhyCBsl1VcxaZfZVodJfOPPvS\n\tq8ptaOZAQDQox8nkKY+STHVps9HfjKN+mK9KBNxVdAbezrJy7KG3BVMAxFwe/xE4Va6g\n\t9aeA==", "X-Google-DKIM-Signature": "v=1; a=rsa-sha256; c=relaxed/relaxed;\n\td=1e100.net; s=20230601; t=1761316856; x=1761921656;\n\th=content-transfer-encoding:mime-version:message-id:date:subject:cc\n\t:to:from:x-gm-message-state:from:to:cc:subject:date:message-id\n\t:reply-to;\n\tbh=nDFe4dQU0l4w9wPRMvbWU+zyzN47eglyj+Xh9oe8AEM=;\n\tb=vrly71iM2nVGfMB7wJmWVw/XbCwZOUPxPyOag7d7HriWlJMl+phBtcwezYHwFxISrI\n\th4/jg9sVn8uglJW+TEgwpD+hrnr/tz1YU0l+HfAPYKzjuhk7WYBqNxPfSuYwlqi6U5Hg\n\tkgW0HHzuKlNQHQeR3/e4MpmrqIDRuabLiu0qdMKzRyvBMX2hCPJKxYxrAWy7nb0/XDKo\n\t6xI3kwKNMPjJrvveSHhjkeZ5Z8dQUXHiW0SnTkZGtFUfyrI/SpvMnUq3DUlZQvD5qLDS\n\tG536GoQdBCxOJO5F9qvLuoCNLRPvZY/DjA+g0YomKKeF+qoG5DZNpuwdwNnyKe+jWhrY\n\ty3LQ==", "X-Gm-Message-State": "AOJu0YzDb10TjVlClntoBV3QuXli86GqthX2eUkQVZQ3tye3202TRtOj\n\tHGiMMI/izUnnTMKU2VCGX/4PBfM6n5bitbEHnrBTEUrzKN1gaLFmufKCPs0UvYdeGRQqJ4hDLgp\n\tG5iHNk3o=", "X-Gm-Gg": "ASbGncuWrYvUAy5zCQOw2gLTNzzlIPFCi9CVUyE98hsazDjx21yxVRc09ELOboFbV55\n\ttHg2LppmJ26HWUpuV0RlPf1knpsEI+ZjYwi7CTULBl3S4RhPq1+X9TJXsKGaAfiwBUvgyhFETTk\n\tPXj8aguUP1+S0jQvP2hK3N22+QgbsvrYr/xvXVtBgC+XIc+RpIHJYq7HQ6UT2h/DCEhVZ2wRNV2\n\tfDOhDMuHpBHEt43q5sQO3cfd3V4Wd6EERMZcks7VdCrMgH3wFZq+gvOcOzeYyJyXAXKNY90M2/f\n\tjjeUX2mJVnjbBjqHXMgYDSOUWSBi3lk7NSsVZGQnxYasdQLxkShUgazUuGIMh4R0UZdTGjOEM6T\n\tbUVgnsXv0UqAvGaMjAvyypvyIj+PrOkXkyGs2WwlnDeU78qmkwsPXxaym6lDcH3bfHASA8aH4g7\n\tmoKbYCD8RYnyRbd5EueShtIdXLSbYIU9HUpFykfmKOKipp/uTbvU8/C20J2T97cn2kPN6KzF/9g\n\tF6B/rUMXv7g8jNOWoLNsqDd9Q==", "X-Google-Smtp-Source": "AGHT+IGKVd0noM1r1viNaSimgU0JZfUxFti9aRPiq+4YTvurwQm842ZHdWkQtz4Wu3JfaVOL9HWzZw==", "X-Received": "by 2002:a5d:5f55:0:b0:427:5ed:296d with SMTP id\n\tffacd0b85a97d-42990712615mr2208660f8f.28.1761316855907; \n\tFri, 24 Oct 2025 07:40:55 -0700 (PDT)", "From": "David Plowman <david.plowman@raspberrypi.com>", "To": "libcamera-devel@lists.libcamera.org", "Cc": "David Plowman <david.plowman@raspberrypi.com>", "Subject": "[PATCH 0/4] Raspberry Pi AWB using neural networks", "Date": "Fri, 24 Oct 2025 15:15:59 +0100", "Message-ID": "<20251024144049.3311-1-david.plowman@raspberrypi.com>", "X-Mailer": "git-send-email 2.47.3", "MIME-Version": "1.0", "Content-Transfer-Encoding": "8bit", "X-BeenThere": "libcamera-devel@lists.libcamera.org", "X-Mailman-Version": "2.1.29", "Precedence": "list", "List-Id": "<libcamera-devel.lists.libcamera.org>", "List-Unsubscribe": "<https://lists.libcamera.org/options/libcamera-devel>,\n\t<mailto:libcamera-devel-request@lists.libcamera.org?subject=unsubscribe>", "List-Archive": "<https://lists.libcamera.org/pipermail/libcamera-devel/>", "List-Post": "<mailto:libcamera-devel@lists.libcamera.org>", "List-Help": "<mailto:libcamera-devel-request@lists.libcamera.org?subject=help>", "List-Subscribe": "<https://lists.libcamera.org/listinfo/libcamera-devel>,\n\t<mailto:libcamera-devel-request@lists.libcamera.org?subject=subscribe>", "Errors-To": "libcamera-devel-bounces@lists.libcamera.org", "Sender": "\"libcamera-devel\" <libcamera-devel-bounces@lists.libcamera.org>" }, "content": "Hi everyone\n\nHere's our first go at doing AWB using neural networks. For both the\nPiSP and VC4 we take the image statistics and feed them to a neural\nnetwork which tells us what it thinks the colour temperature should\nbe.\n\nThe first commit splits our existing Awb class into an Awb base class,\nand an AwbBayes derived class, so that the subsequent AwbNN class (2nd\ncommit) can share code.\n\nFinally we update the tuning files for the new AWB and supply a TFLite\nmodel for each platform, though by default it remains off for\nnow. Just switch the \"disable\" tag between the two AWB configurations\nto enable the new algorithm.\n\nWe'll shortly be making public our image capture/annotation/training\ncode which will include the full source for the model definitions. It\nwill allow users to train their own, either from scratch, or\nincrementally using our datasets and models as a starting point.\n\nThis is the work of our intern who was with us over the summer.\n\nThanks!\nDavid\n\nPeter Bailey (4):\n ipa: rpi: controller: awb: Separate Bayesian Awb into AwbBayes\n ipa: rpi: controller: awb: Add Neural Network Awb\n ipa: rpi: pisp: vc4: Update tuning files for new awb and add model\n ipa: rpi: controller: Ignore algorithms starting with disable\n\n src/ipa/rpi/controller/controller.cpp | 6 +\n src/ipa/rpi/controller/meson.build | 10 +\n src/ipa/rpi/controller/rpi/awb.cpp | 409 ++---------------\n src/ipa/rpi/controller/rpi/awb.h | 99 ++---\n src/ipa/rpi/controller/rpi/awb_bayes.cpp | 444 +++++++++++++++++++\n src/ipa/rpi/controller/rpi/awb_nn.cpp | 442 ++++++++++++++++++\n src/ipa/rpi/pisp/data/awb_model.tflite | Bin 0 -> 47624 bytes\n src/ipa/rpi/pisp/data/imx219.json | 65 ++-\n src/ipa/rpi/pisp/data/imx296.json | 64 ++-\n src/ipa/rpi/pisp/data/imx296_16mm.json | 64 ++-\n src/ipa/rpi/pisp/data/imx296_6mm.json | 64 ++-\n src/ipa/rpi/pisp/data/imx477.json | 63 +++\n src/ipa/rpi/pisp/data/imx477_16mm.json | 65 ++-\n src/ipa/rpi/pisp/data/imx477_6mm.json | 65 ++-\n src/ipa/rpi/pisp/data/imx477_scientific.json | 79 +++-\n src/ipa/rpi/pisp/data/imx500.json | 67 +++\n src/ipa/rpi/pisp/data/imx708.json | 64 ++-\n src/ipa/rpi/pisp/data/imx708_wide.json | 62 +++\n src/ipa/rpi/pisp/data/meson.build | 7 +\n src/ipa/rpi/pisp/data/ov5647.json | 63 +++\n src/ipa/rpi/vc4/data/awb_model.tflite | Bin 0 -> 42976 bytes\n src/ipa/rpi/vc4/data/imx219.json | 64 +++\n src/ipa/rpi/vc4/data/imx296.json | 64 +++\n src/ipa/rpi/vc4/data/imx477.json | 69 +++\n src/ipa/rpi/vc4/data/imx500.json | 67 +++\n src/ipa/rpi/vc4/data/imx708.json | 72 +++\n src/ipa/rpi/vc4/data/imx708_wide.json | 62 +++\n src/ipa/rpi/vc4/data/meson.build | 8 +\n src/ipa/rpi/vc4/data/ov5647.json | 64 +++\n 29 files changed, 2244 insertions(+), 428 deletions(-)\n create mode 100644 src/ipa/rpi/controller/rpi/awb_bayes.cpp\n create mode 100644 src/ipa/rpi/controller/rpi/awb_nn.cpp\n create mode 100644 src/ipa/rpi/pisp/data/awb_model.tflite\n create mode 100644 src/ipa/rpi/vc4/data/awb_model.tflite" }