This question has been converted to Community Wiki and wiki locked
because it is an example of a question that seeks a list of answers
and appears to be popular enough to protect it from closure. It
should be treated as a special case and should not be viewed as the
type of question that is encouraged on this, or any Stack Exchange
site, but if you wish to contribute more content to it then feel free
to do so by editing this answer.
As @flippinGeo says, ODK is great. But it is not an integrated product (i.e., forms are set up in one area, aggregation is done in another, and the app is Android only). It works fantastically, though, and we use it at work and it is simple and fast to use. We host it on Google's AppEngine and it costs basically nothing, even storing a few thousand photos. I get it to push data to a fusion table that can then be visualised with Leaflet, see: http://maps.gcc.tas.gov.au/graffiti.html.
I'm currently messing around with Fulcrum, which is not open-source, but is a nice SaaS product that is reasonably cheap and has a really nice web interface. I don't like their API, though (admittedly I haven't tried very hard).
There is also QField for QGIS which is QGIS with a simplified interface for touch interaction. It supports constraints defined in QGIS projects, forms defined in QGIS projects and a wide variety of on- and offline data providers. Among them PostGIS and GeoPackage. Synchronisation with an offline copy of a database has to be done manually as a preparation step on a desktop computer with QGIS but a QGIS plugin QFieldSync is available to ease the job. Unfortunately it is only possible to use it on Android so far, it would be easy to port it to Windows and probably possible to port it to iOS as well.
What ESRI does well is that if you have a geodatabase set up with a feature domain, then you publish that table to ArcGIS Online, then use Collector, all your forms are created automatically. If you need further manipulate the data after submission using programming, you can use the ArcGIS API for Python to get data in and out of AGOL.
QGIS for Android
The other answer to this question was to suggest QGIS for android, but I think that is too big for what you want to do. I think a minimal interface, with almost no spatial content on the collection side is best, which is what makes ODK so nice. It collects a point, which is enough, and the accuracy of the point, which is important, but it doesn't put it all on a big, full map interface, which is also really important for the folks collecting information, because they are NOT GIS FOLKS!
Input is a free and open source mobile app based on QGIS. It is available for iOS and Android. Input comes with built-in synchronisation function which allows users to upload/download their changes when there is a network connection. Input data and project preparation is done in QGIS, therefore, all file formats supported in QGIS can be loaded in Input.