THE ORGANIZATION
The Alliance of Bioversity International (
www.bioversityinternational.org) and the International Center for Tropical Agriculture (CIAT) (
www.ciat.cgiar.org) delivers research-based solutions that harness agricultural biodiversity and sustainably transform food systems to improve people’s lives. Alliance solutions address the global crises of malnutrition, climate change, biodiversity loss, and environmental degradation.
With novel partnerships, the Alliance generates evidence and mainstreams innovations to transform food systems and landscapes so that they sustain the planet, drive prosperity, and nourish people in a climate crisis.
The Alliance is part of CGIAR, a global research partnership for a food-secure future.
1. Background:
The Alliance of Bioversity International and CIAT seeks a senior Android developer for a 3-month consultancy. The goal is to capture a whole-plot image inside the Ona app, so breeders no longer switch to the phone's native camera.
Ona is a mobile and web digital phenotyping tool for on-station breeding teams in Sub-Saharan Africa. It runs at Alliance sites and with national partners such as TARI in Tanzania, Uganda and Malawi. Ona covers common bean, cowpea and sorghum, with more crops coming. Breeders use an Android phone, often mounted on the Bruno physical aid, to image plots. Machine-learning models then extract traits such as plant stand, flower count and pod count.
Plant stand (number of established plants per plot) is measured from one image of the full plot. A standard plot row is about 4 m long. Today this image is a panorama taken with the phone's native camera app.
2. Problem statement
The panorama step breaks the Ona workflow: users leave Ona, take the panorama in the native camera, then return and link the image to the right plot. This adds time and errors at scale.
• Time. Switching between apps adds time to every plot, which adds up across large trials.
• Data integrity. Images taken outside Ona can be linked to the wrong plot, lost, or saved without Ona metadata (plot ID, GPS, timestamp, device, capture settings).
• Inconsistency. Native panorama behaviour, resolution and stitching differ by phone brand and Android version. This makes model input less consistent.
• Hard to build. Two Ona developers looked at in-app panorama capture. Android has no standard panorama API, and real-time stitching on low- and mid-range phones is hard. They concluded it needs specialist skills.
We are not tied to panorama. The need is one reliable, plot-linked image (or image set) from which plant stand can be counted for a ~4 m plot.
3. Objective
Deliver a production-ready, in-app whole-plot capture feature in the Ona Android app, so a user can image a ~4 m plot without leaving Ona and the result is good enough for automated plant-stand counting.
Specific objectives:
1. Assess and prototype at least three capture approaches (section 4) and recommend one, based on field evidence.
2. Build the chosen approach into the Ona app, linked to Ona's plot registration and metadata.
3. Validate it on target devices and in the field with Ona breeding teams.
4. Hand over clean, documented, maintainable code to the Ona team.
4. Scope of work
The consultant will start open on method, test the options below, and commit to one by the end of month 1. The consultant may propose other options.
Option How it works Main strengths Main risks
A. In-app panorama, on-device stitching Guided sweep in Ona's camera screen (e.g. CameraX), live overlap guide, stitched on the phone (e.g. OpenCV) Works offline; instant result to check Heavy on low-end phones; stitch errors from wind or uneven sweep
B. In-app guided multi-frame capture, cloud stitching Ona captures overlapping frames with sensor data (gyroscope, accelerometer); stitched on the server after sync Light on the phone; stronger stitching on the server No result until sync; poor connectivity at field sites
C. Short video sweep 3–5 s video of the plot; server extracts frames, then stitches or counts plants with tracking Fast and simple for the user Large files; motion blur; needs a counting or tracking pipeline
D. Stitch-free counting Overlapping frames counted one by one; duplicates removed by tracking or position Avoids stitching artefacts Needs model and pipeline work with the Ona ML team
E. Single wide shot Ultra-wide lens or a higher Bruno mount to fit the plot in one frame Simplest workflow Not all phones have ultra-wide; distortion and lower detail at plot ends
Tasks:
• Review the current Ona capture flow, codebase and the panorama work done by the Ona developers.
• Build quick prototypes for the most promising options and test them on the target devices.
• Compare options on capture time, stitching or counting success rate, image quality for plant-stand models, phone load (memory, battery, heat), offline behaviour and data size.
• Agree the chosen approach with the Ona product and ML teams.
• Build the chosen approach into the Ona app, including any server-side component if needed.
• Support at least one field validation round with an Ona breeding team.
Out of scope: training new plant-stand models, and redesigning Ona features outside plot capture.
5. Technical requirements
The solution must meet these requirements:
• No app switching. The full capture happens inside Ona and is linked to the active plot automatically.
• Whole plot. The output covers the full ~4 m plot row at a resolution the plant-stand model can use.
• Speed. Capture plus review takes no longer than today's panorama step, with a target of under 20 s per plot.
• Devices. Works on the mid- and low-range Android phones used by Ona teams.
• Offline first. Capture works with no network. Any server step runs after sync and does not block the user.
• Field conditions. Works in bright sun, wind and uneven terrain, with the phone handheld or on the Bruno aid.
• Feedback. The user sees a clear guide during capture and a quality check after (e.g. failed stitch, blur, missing section), with a quick retake.
• Metadata. Each image keeps plot ID, timestamp, device and capture settings in Ona's existing data model.
• Fit with the Ona stack. Code follows Ona's Android architecture and standards [stack details shared at onboarding]. Any cloud component fits Ona's existing backend and image pipeline.
• Open licences. Third-party libraries must allow use in a publicly funded, non-commercial tool.
Requirements
6. Deliverables and timeline
The consultancy runs 3 months (about 60 working days), in three phases with a go/no-go point at the end of month 1.
# Deliverable Due
#
| Deliverable
| Due
|
D1
| Inception note: review of the current flow and earlier
attempts, test plan, device list
| Week 2
|
D2
| Options report with working prototypes, test results and a
recommended approach, agreed with the Ona team
| Week 4
|
D3
| Beta build in the Ona app, with any server component, ready
for field testing
| Week 9
|
D4
| Field validation report: capture time, success rate, image
quality for plant-stand counting
| Week 11
|
D5
| Final release merged into the Ona codebase, technical
documentation, tests and a handover session
| Week 12–13
|
Fees
are paid in three instalments, each on acceptance of the linked
deliverables:
Payment
| Linked deliverables
| Share of fee
|
1
| D1 + D2
| 30%
|
2
| D3
| 35%
|
3
| D4 + D5
| 35%
|
If
no option meets the requirements at D2, the Alliance and the consultant will
agree a revised plan or close the consultancy after D2.
7. Qualifications and experience
The consultant must show shipped Android camera and image-processing work, not only general app development.
Required
• 5+ years of native Android development (Kotlin; Java a plus).
• Shipped at least one app with a custom camera feature using CameraX or Camera2.
• Hands-on image stitching, panorama or computer-vision work (e.g. OpenCV, feature matching, homography, image registration).
• Use of phone sensors (gyroscope, accelerometer) for capture guidance or motion tracking.
• Performance tuning on low- and mid-range Android phones (memory, battery, heat).
• Offline-first apps and background sync.
• Fluent written and spoken English.
Desirable
• Server-side image processing (Python, OpenCV, cloud functions) or video frame extraction.
• On-device ML (TensorFlow Lite, ML Kit, ONNX) or object tracking.
• Native code with the Android NDK (C++).
• Experience in agriculture, field data collection or apps used in Sub-Saharan Africa.
• Work on open-source or publicly funded projects.
Applicants should include links to code, apps or demos that show camera or stitching work.
8. Working arrangements
• Reporting. The consultant reports to the Head of Product, and works daily with the Ona Android developers and ML team.
• Location. Remote.
• Rhythm. Weekly progress call; code reviewed through Ona's repository and pull-request process.
• Equipment. The Alliance gives access to the codebase, test devices or device list, sample plot images and the Bruno aid where needed.
• Intellectual property. All code, documentation and data produced belong to the Alliance and may be released under an open licence.
• Data. The consultant follows Alliance data-protection and data-sharing policies.
• Fees. Paid per deliverable on acceptance (section 6).
Benefits
9. How to apply
Attach the below documents alongside your application.
1. CV, highlighting Android camera, stitching and computer-vision work.
2. Portfolio links: apps, repositories or demo videos of similar features.
3. Financial proposal: daily rate and total fee for about 60 working days.
Shortlisted applicants will have a technical interview with the Ona team, which may include a walk-through of past camera or stitching code.
Applications
Applicants are invited to visit
https://www.bioversityinternational.org/jobs/ to get full details of the position and to submit their applications. Applications MUST include Ona in-app plot imaging consultancy as the position applied for.
Application including CV, technical proposal, and financial proposal should be saved as one document using the candidate’s last name, first name for ease of sorting.
Note: The Alliance does not charge a fee at any stage of the recruitment process (application, interview meeting, processing or training). The Alliance also does not concern itself with information on applicants' bank accounts.
Applications closing date: 30 October 2026
Please note that email applications will not be considered.
Only short-listed candidates will be contacted.
We invite you to learn more about us at: